@0xmonaco/types 1.1.5 → 1.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +1 -3
  2. package/dist/analytics/builders.d.ts +135 -0
  3. package/dist/analytics/builders.js +11 -0
  4. package/dist/analytics/index.d.ts +153 -0
  5. package/dist/analytics/index.js +27 -0
  6. package/dist/analytics/wallets.d.ts +197 -0
  7. package/dist/analytics/wallets.js +16 -0
  8. package/dist/applications/requests.d.ts +5 -5
  9. package/dist/buildercodes/index.d.ts +13 -11
  10. package/dist/buildercodes/responses.d.ts +1 -0
  11. package/dist/buildercodes/responses.js +10 -0
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.js +1 -0
  14. package/dist/margin-accounts/index.d.ts +7 -2
  15. package/dist/market/index.d.ts +0 -20
  16. package/dist/profile/index.d.ts +10 -17
  17. package/dist/rfq/responses.d.ts +36 -0
  18. package/dist/rfq/responses.js +29 -0
  19. package/dist/sdk/index.d.ts +4 -1
  20. package/dist/trading/index.d.ts +7 -3
  21. package/dist/trading/orders.d.ts +11 -0
  22. package/dist/trading/responses.d.ts +9 -3
  23. package/dist/validation/margin-accounts.d.ts +2 -2
  24. package/dist/validation/margin-accounts.js +5 -5
  25. package/dist/validation/trading.d.ts +15 -0
  26. package/dist/validation/trading.js +34 -42
  27. package/dist/websocket/base.d.ts +40 -10
  28. package/dist/websocket/client.d.ts +32 -4
  29. package/dist/websocket/depth.d.ts +142 -0
  30. package/dist/websocket/depth.js +13 -0
  31. package/dist/websocket/events/orderbook-events.d.ts +41 -1
  32. package/dist/websocket/events/rfq-events.d.ts +30 -1
  33. package/dist/websocket/events/trade-events.d.ts +37 -0
  34. package/dist/websocket/index.d.ts +1 -0
  35. package/dist/websocket/index.js +1 -0
  36. package/dist/websocket/snapshots.d.ts +23 -1
  37. package/dist/wire/operations.d.ts +1 -1
  38. package/dist/wire/operations.js +16 -0
  39. package/dist/wire/schema.d.ts +2344 -276
  40. package/package.json +2 -2
@@ -434,6 +434,329 @@ export interface paths {
434
434
  patch?: never;
435
435
  trace?: never;
436
436
  };
437
+ "/api/v1/analytics/builder-leaderboard": {
438
+ parameters: {
439
+ query?: never;
440
+ header?: never;
441
+ path?: never;
442
+ cookie?: never;
443
+ };
444
+ /**
445
+ * Builder leaderboard
446
+ * @description Displayed builders ranked by volume over a window, largest first.
447
+ */
448
+ get: operations["list_builder_leaderboard"];
449
+ put?: never;
450
+ post?: never;
451
+ delete?: never;
452
+ options?: never;
453
+ head?: never;
454
+ patch?: never;
455
+ trace?: never;
456
+ };
457
+ "/api/v1/analytics/builders": {
458
+ parameters: {
459
+ query?: never;
460
+ header?: never;
461
+ path?: never;
462
+ cookie?: never;
463
+ };
464
+ /**
465
+ * Builders
466
+ * @description Every displayed builder, by name. Archived applications are left out.
467
+ */
468
+ get: operations["list_builders"];
469
+ put?: never;
470
+ post?: never;
471
+ delete?: never;
472
+ options?: never;
473
+ head?: never;
474
+ patch?: never;
475
+ trace?: never;
476
+ };
477
+ "/api/v1/analytics/builders/{builder}": {
478
+ parameters: {
479
+ query?: never;
480
+ header?: never;
481
+ path?: never;
482
+ cookie?: never;
483
+ };
484
+ /**
485
+ * Builder
486
+ * @description One builder, by application or group uuid, code, or application client id.
487
+ */
488
+ get: operations["get_builder"];
489
+ put?: never;
490
+ post?: never;
491
+ delete?: never;
492
+ options?: never;
493
+ head?: never;
494
+ patch?: never;
495
+ trace?: never;
496
+ };
497
+ "/api/v1/analytics/builders/{builder}/series": {
498
+ parameters: {
499
+ query?: never;
500
+ header?: never;
501
+ path?: never;
502
+ cookie?: never;
503
+ };
504
+ /**
505
+ * Builder series
506
+ * @description One builder's figures per bucket over a window, oldest first.
507
+ */
508
+ get: operations["get_builder_series"];
509
+ put?: never;
510
+ post?: never;
511
+ delete?: never;
512
+ options?: never;
513
+ head?: never;
514
+ patch?: never;
515
+ trace?: never;
516
+ };
517
+ "/api/v1/analytics/builders/{builder}/totals": {
518
+ parameters: {
519
+ query?: never;
520
+ header?: never;
521
+ path?: never;
522
+ cookie?: never;
523
+ };
524
+ /**
525
+ * Builder totals
526
+ * @description One builder's figures over a window.
527
+ */
528
+ get: operations["get_builder_totals"];
529
+ put?: never;
530
+ post?: never;
531
+ delete?: never;
532
+ options?: never;
533
+ head?: never;
534
+ patch?: never;
535
+ trace?: never;
536
+ };
537
+ "/api/v1/analytics/deposits": {
538
+ parameters: {
539
+ query?: never;
540
+ header?: never;
541
+ path?: never;
542
+ cookie?: never;
543
+ };
544
+ /**
545
+ * Vault deposits
546
+ * @description Deposits, newest first.
547
+ */
548
+ get: operations["list_vault_deposits"];
549
+ put?: never;
550
+ post?: never;
551
+ delete?: never;
552
+ options?: never;
553
+ head?: never;
554
+ patch?: never;
555
+ trace?: never;
556
+ };
557
+ "/api/v1/analytics/markets/volume": {
558
+ parameters: {
559
+ query?: never;
560
+ header?: never;
561
+ path?: never;
562
+ cookie?: never;
563
+ };
564
+ /**
565
+ * Market volumes
566
+ * @description Volume per market over a window, largest first.
567
+ */
568
+ get: operations["list_market_volumes"];
569
+ put?: never;
570
+ post?: never;
571
+ delete?: never;
572
+ options?: never;
573
+ head?: never;
574
+ patch?: never;
575
+ trace?: never;
576
+ };
577
+ "/api/v1/analytics/protocol/series": {
578
+ parameters: {
579
+ query?: never;
580
+ header?: never;
581
+ path?: never;
582
+ cookie?: never;
583
+ };
584
+ /**
585
+ * Protocol series
586
+ * @description Protocol figures per bucket over a window, oldest first.
587
+ */
588
+ get: operations["get_protocol_series"];
589
+ put?: never;
590
+ post?: never;
591
+ delete?: never;
592
+ options?: never;
593
+ head?: never;
594
+ patch?: never;
595
+ trace?: never;
596
+ };
597
+ "/api/v1/analytics/protocol/totals": {
598
+ parameters: {
599
+ query?: never;
600
+ header?: never;
601
+ path?: never;
602
+ cookie?: never;
603
+ };
604
+ /**
605
+ * Protocol totals
606
+ * @description Protocol totals over a window.
607
+ */
608
+ get: operations["get_protocol_totals"];
609
+ put?: never;
610
+ post?: never;
611
+ delete?: never;
612
+ options?: never;
613
+ head?: never;
614
+ patch?: never;
615
+ trace?: never;
616
+ };
617
+ "/api/v1/analytics/tokens": {
618
+ parameters: {
619
+ query?: never;
620
+ header?: never;
621
+ path?: never;
622
+ cookie?: never;
623
+ };
624
+ /**
625
+ * Token custody
626
+ * @description Custody per token and the total value locked.
627
+ */
628
+ get: operations["list_token_custody"];
629
+ put?: never;
630
+ post?: never;
631
+ delete?: never;
632
+ options?: never;
633
+ head?: never;
634
+ patch?: never;
635
+ trace?: never;
636
+ };
637
+ "/api/v1/analytics/tokens/{token}": {
638
+ parameters: {
639
+ query?: never;
640
+ header?: never;
641
+ path?: never;
642
+ cookie?: never;
643
+ };
644
+ /**
645
+ * Token custody detail
646
+ * @description One token's custody, by symbol, asset UUID or contract address.
647
+ */
648
+ get: operations["get_token_custody"];
649
+ put?: never;
650
+ post?: never;
651
+ delete?: never;
652
+ options?: never;
653
+ head?: never;
654
+ patch?: never;
655
+ trace?: never;
656
+ };
657
+ "/api/v1/analytics/treasury/net-fees": {
658
+ parameters: {
659
+ query?: never;
660
+ header?: never;
661
+ path?: never;
662
+ cookie?: never;
663
+ };
664
+ /**
665
+ * Treasury net fees
666
+ * @description The treasury's all-time net fees.
667
+ */
668
+ get: operations["get_treasury_net_fees"];
669
+ put?: never;
670
+ post?: never;
671
+ delete?: never;
672
+ options?: never;
673
+ head?: never;
674
+ patch?: never;
675
+ trace?: never;
676
+ };
677
+ "/api/v1/analytics/wallet-leaderboard": {
678
+ parameters: {
679
+ query?: never;
680
+ header?: never;
681
+ path?: never;
682
+ cookie?: never;
683
+ };
684
+ /**
685
+ * Wallet leaderboard
686
+ * @description Wallets ranked by all-time taker volume, largest first. One row per
687
+ * wallet, every builder counted.
688
+ */
689
+ get: operations["list_wallet_leaderboard"];
690
+ put?: never;
691
+ post?: never;
692
+ delete?: never;
693
+ options?: never;
694
+ head?: never;
695
+ patch?: never;
696
+ trace?: never;
697
+ };
698
+ "/api/v1/analytics/wallets/{wallet}": {
699
+ parameters: {
700
+ query?: never;
701
+ header?: never;
702
+ path?: never;
703
+ cookie?: never;
704
+ };
705
+ /**
706
+ * Wallet summary
707
+ * @description One wallet's all-time taker volume and trades, per displayed builder,
708
+ * and its liquidation count. A wallet that never traded answers with
709
+ * empty figures.
710
+ */
711
+ get: operations["get_wallet_summary"];
712
+ put?: never;
713
+ post?: never;
714
+ delete?: never;
715
+ options?: never;
716
+ head?: never;
717
+ patch?: never;
718
+ trace?: never;
719
+ };
720
+ "/api/v1/analytics/wallets/{wallet}/liquidations": {
721
+ parameters: {
722
+ query?: never;
723
+ header?: never;
724
+ path?: never;
725
+ cookie?: never;
726
+ };
727
+ /**
728
+ * Wallet liquidations
729
+ * @description One wallet's liquidation events across every market, newest first.
730
+ */
731
+ get: operations["list_wallet_liquidations"];
732
+ put?: never;
733
+ post?: never;
734
+ delete?: never;
735
+ options?: never;
736
+ head?: never;
737
+ patch?: never;
738
+ trace?: never;
739
+ };
740
+ "/api/v1/analytics/withdrawals": {
741
+ parameters: {
742
+ query?: never;
743
+ header?: never;
744
+ path?: never;
745
+ cookie?: never;
746
+ };
747
+ /**
748
+ * Vault withdrawals
749
+ * @description Withdrawals, newest first.
750
+ */
751
+ get: operations["list_vault_withdrawals"];
752
+ put?: never;
753
+ post?: never;
754
+ delete?: never;
755
+ options?: never;
756
+ head?: never;
757
+ patch?: never;
758
+ trace?: never;
759
+ };
437
760
  "/api/v1/applications/balances": {
438
761
  parameters: {
439
762
  query?: never;
@@ -938,12 +1261,25 @@ export interface paths {
938
1261
  *
939
1262
  * A claim can also fail as **HTTP 503** / **UNAVAILABLE** when the matching
940
1263
  * engine is unreachable, restarting, or slow to answer. Treat that as an
941
- * UNKNOWN outcome, NOT a rejection. The request is admitted to the sequencer
1264
+ * UNKNOWN outcome, NOT a rejection: the request is admitted to the sequencer
942
1265
  * before its reply is sent, so a claim that timed out in transit may still
943
- * commit, and there is no idempotency key — a blind retry can claim a SECOND
944
- * time. Do NOT retry automatically, and do not settle it with a balance
945
- * read: an admitted claim can still be sitting in the sequencer queue when
946
- * the balance is read, so an unchanged balance does not prove the claim will
1266
+ * commit.
1267
+ *
1268
+ * Send an `idempotencyKey` to make that retry safe. Retrying the same key
1269
+ * and request within 15 minutes of the original acceptance returns the
1270
+ * original claim's result without moving money again, including when the
1271
+ * original is still queued, so the retry waits for it. The same key with a
1272
+ * different request, or a key already used on another endpoint, is refused
1273
+ * with `IDEMPOTENCY_KEY_CONFLICT` (**HTTP 409** / **ALREADY_EXISTS**).
1274
+ * `ORDER_SUBMISSION_UNAVAILABLE` and `ORDER_SUBMISSION_CAPACITY_EXCEEDED`
1275
+ * (**HTTP 503** / **UNAVAILABLE**) mean the outcome is held but cannot be
1276
+ * read, or no new key can be accepted: retry with the same key and request.
1277
+ * The window does not extend on retries; after it the key claims again.
1278
+ *
1279
+ * Without a key, a blind retry can claim a SECOND time.
1280
+ * Do NOT retry automatically, and do not settle it with a balance read: an
1281
+ * admitted claim can still be sitting in the sequencer queue when the
1282
+ * balance is read, so an unchanged balance does not prove the claim will
947
1283
  * not commit. Treat the claim as PENDING rather than failed, re-check once
948
1284
  * the engine is healthy again, and reconcile before issuing another claim.
949
1285
  *
@@ -2544,9 +2880,10 @@ export interface paths {
2544
2880
  * Orderbook Snapshot
2545
2881
  * @description Orderbook Snapshot
2546
2882
  *
2547
- * Get the complete orderbook snapshot for a trading pair showing all bids
2548
- * and asks with their price levels. This is a public endpoint that does
2549
- * not require authentication.
2883
+ * Get a point-in-time orderbook snapshot for a trading pair: the top bid
2884
+ * and ask price levels, up to 1000 per side. Above 100 levels the snapshot
2885
+ * is read from the market-data service and carries bookSeq. This is a
2886
+ * public endpoint that does not require authentication.
2550
2887
  */
2551
2888
  get: operations["get_orderbook_snapshot"];
2552
2889
  put?: never;
@@ -2601,8 +2938,17 @@ export interface paths {
2601
2938
  * Batch cancel specific orders
2602
2939
  * @description Batch cancel specific orders.
2603
2940
  *
2604
- * Cancel multiple specific orders by their IDs. For canceling all orders,
2605
- * use /batch-cancel-all or /batch-cancel-all/{tradingPairId}.
2941
+ * Cancel multiple specific orders by their IDs. Every requested ID gets one
2942
+ * entry in `results`, in request order (a repeated ID is answered at each
2943
+ * occurrence), and the totals count every requested ID, so
2944
+ * `totalRequested == totalCancelled + totalFailed`. An ID that is not one of
2945
+ * your live orders (unknown, another user's, or already filled or
2946
+ * cancelled) is a failed entry with code `ORDER_NOT_FOUND`. An order the
2947
+ * matching engine accepted is cancellable as soon as it is acknowledged.
2948
+ * A delegated session's cancel policy is checked against each order's
2949
+ * persisted fields: an ID with no persisted order yet is a failed entry
2950
+ * (`BAD_REQUEST`) and is not cancelled. For canceling all orders, use
2951
+ * /batch-cancel-all or /batch-cancel-all/{tradingPairId}.
2606
2952
  */
2607
2953
  post: operations["batch_cancel_orders"];
2608
2954
  delete?: never;
@@ -4047,6 +4393,27 @@ export interface components {
4047
4393
  */
4048
4394
  copyAccountAvailable?: string | null;
4049
4395
  };
4396
+ /** @description The window a response covers, as the server resolved it. */
4397
+ AnalyticsWindow: {
4398
+ /**
4399
+ * Format: int64
4400
+ * @description Window start as Unix milliseconds. Buckets starting at or after it count.
4401
+ * @example 1762041600000
4402
+ */
4403
+ startTime?: number | null;
4404
+ /**
4405
+ * Format: int64
4406
+ * @description Window end as Unix milliseconds. Buckets starting at or before it count, so the bucket holding it (usually partial) is included.
4407
+ * @example 1762128000000
4408
+ */
4409
+ endTime?: number | null;
4410
+ /**
4411
+ * @description Bucket size the window is counted in: hour up to 2.5 days, day up to 45 days, week beyond. UTC; weeks start Monday.
4412
+ * @example hour
4413
+ * @enum {string|null}
4414
+ */
4415
+ granularity?: "hour" | "day" | "week" | null;
4416
+ };
4050
4417
  AppUser: {
4051
4418
  /**
4052
4419
  * Format: uuid
@@ -4322,22 +4689,23 @@ export interface components {
4322
4689
  BatchCancelOrdersResponse: {
4323
4690
  /**
4324
4691
  * Format: int32
4325
- * @description Number of orders requested to cancel
4692
+ * @description Number of order IDs in the request, repeats included. Always equals totalCancelled + totalFailed and the length of results.
4326
4693
  * @example 5
4327
4694
  */
4328
4695
  totalRequested?: number | null;
4329
4696
  /**
4330
4697
  * Format: int32
4331
- * @description Number of orders successfully cancelled
4698
+ * @description Number of results with cancelledAt and no error
4332
4699
  * @example 4
4333
4700
  */
4334
4701
  totalCancelled?: number | null;
4335
4702
  /**
4336
4703
  * Format: int32
4337
- * @description Number of cancellations that failed
4704
+ * @description Number of results with an error, including IDs that are unknown or not yours (ORDER_NOT_FOUND)
4338
4705
  * @example 1
4339
4706
  */
4340
4707
  totalFailed?: number | null;
4708
+ /** @description One result per requested order ID, in request order */
4341
4709
  results?: components["schemas"]["BatchCancelResult"][] | null;
4342
4710
  };
4343
4711
  BatchCancelResult: {
@@ -4465,7 +4833,7 @@ export interface components {
4465
4833
  */
4466
4834
  quantity: string;
4467
4835
  /**
4468
- * @description Trading mode: SPOT or MARGIN (default: SPOT)
4836
+ * @description Trading mode: SPOT or MARGIN. Omitted, it takes the trading pair market type
4469
4837
  * @example SPOT
4470
4838
  */
4471
4839
  tradingMode?: string | null;
@@ -4525,8 +4893,8 @@ export interface components {
4525
4893
  */
4526
4894
  reduceOnly?: boolean | null;
4527
4895
  /**
4528
- * @description Strategy key used to group risk buckets for delegated/margin orders
4529
- * @example my-strategy
4896
+ * @description Sub-account key of the margin account the order trades on, like marginAccountId (`default` is the default margin account). Refused when it is not a valid sub-account key or disagrees with marginAccountId; a key naming none of the caller's open sub-accounts is refused by the matching engine.
4897
+ * @example hedge
4530
4898
  */
4531
4899
  strategyKey?: string | null;
4532
4900
  /**
@@ -4541,7 +4909,7 @@ export interface components {
4541
4909
  */
4542
4910
  postOnly?: boolean | null;
4543
4911
  /**
4544
- * @description Client-assigned correlation handle, echoed back on order reads (detail and list) and on order WebSocket events. At most 64 characters from [A-Za-z0-9._:-]; surrounding whitespace is trimmed before storage, and a blank or whitespace-only value is treated as absent. Uniqueness is enforced only among your orders that are RESTING on the book: an item reusing a value another of your resting orders still holds fails that item alone — the batch itself returns 2xx / OK and the offending item's result slot carries error.code CLIENT_ORDER_ID_CONFLICT; no transport-level 409 / ALREADY_EXISTS is raised. An order that never rests — MARKET, IOC/FOK, or a LIMIT that fills completely on arrival — does not take the handle, and the value is released the moment any order reaches a terminal state. It is therefore NOT an idempotency key: resubmitting after a lost response can execute a second time. Reconcile a lost response against the order WebSocket stream, which carries this value on the submit acknowledgement and on fills, including for orders that never rest; order history is replica-backed and can omit an order that did land. The stream is not replayable and has no sequence number to backfill from, and its fan-out is non-persistent Core NATS: the service can re-establish an ended upstream subscription without closing your socket, so events can be missed while your connection still looks healthy. A matching event is therefore positive proof the order was accepted, but silence is NEVER evidence it was not, and no client-observable condition makes it so. Absent positive evidence the outcome is unresolved: hold and escalate rather than resubmitting. Rejections split in two: an item rejected before acceptance (malformed, post-only would cross, handle conflict, a plain MARKET submit with no liquidity, rejected during pricing) fails only that item — a per-item error in an otherwise-successful response — emits no event and is never written to order history (an item rejected AFTER acceptance is persisted with status REJECTED, so only the pre-acceptance class is absent); an accepted LIMIT with IOC or FOK that cannot fill, or an accepted MARKET order whose apparent liquidity is invalidated by maker-risk revalidation, reports matchResult.status REJECTED in its result slot and emits OrderPlaced then OrderRejected, both carrying this value. Neither the batch's 2xx nor a populated result slot therefore means the order executed. Where no surface is conclusive, do not resubmit.
4912
+ * @description Client-assigned correlation handle, echoed back on order reads (detail and list) and on order WebSocket events. At most 64 characters from [A-Za-z0-9._:-]; surrounding whitespace is trimmed before storage, and a blank or whitespace-only value is treated as absent. Uniqueness is enforced only among your orders that are RESTING on the book: an item reusing a value another of your resting orders still holds fails that item alone — the batch itself returns 2xx / OK and the offending item's result slot carries error.code CLIENT_ORDER_ID_CONFLICT; no transport-level 409 / ALREADY_EXISTS is raised. An order that never rests — MARKET, IOC/FOK, or a LIMIT that fills completely on arrival — does not take the handle, and the value is released the moment any order reaches a terminal state. It is therefore NOT an idempotency key: resubmitting after a lost response can execute a second time. Reconcile a lost response against the order WebSocket stream, which carries this value on the submit acknowledgement and on fills, including for orders that never rest; order history is replica-backed and can omit an order that did land. The stream is not replayable and has no sequence number to backfill from, and events are not persisted for redelivery, so one can be missed while your connection still looks healthy. A matching event is therefore positive proof the order was accepted, but silence is NEVER evidence it was not, and no client-observable condition makes it so. Absent positive evidence the outcome is unresolved: hold and escalate rather than resubmitting. Rejections split in two: an item rejected before acceptance (malformed, post-only would cross, handle conflict, a plain MARKET submit with no liquidity, rejected during pricing) fails only that item — a per-item error in an otherwise-successful response — emits no event and is never written to order history (an item rejected AFTER acceptance is persisted with status REJECTED, so only the pre-acceptance class is absent); an accepted LIMIT with IOC or FOK that cannot fill, or an accepted MARKET order whose apparent liquidity is invalidated by maker-risk revalidation, reports matchResult.status REJECTED in its result slot and emits OrderPlaced then OrderRejected, both carrying this value. Neither the batch's 2xx nor a populated result slot therefore means the order executed. Where no surface is conclusive, do not resubmit.
4545
4913
  * @example quote-btc-1130-a
4546
4914
  */
4547
4915
  clientOrderId?: string | null;
@@ -4628,7 +4996,7 @@ export interface components {
4628
4996
  */
4629
4997
  postOnly?: boolean | null;
4630
4998
  /**
4631
- * @description Client-assigned correlation handle, echoed back on order reads (detail and list) and on order WebSocket events. At most 64 characters from [A-Za-z0-9._:-]; surrounding whitespace is trimmed before storage, and a blank or whitespace-only value is treated as absent. Uniqueness is enforced only among your orders that are RESTING on the book: an item reusing a value another of your resting orders still holds fails that item alone — the batch itself returns 2xx / OK and the offending item's result slot carries error.code CLIENT_ORDER_ID_CONFLICT; no transport-level 409 / ALREADY_EXISTS is raised. An order that never rests — MARKET, IOC/FOK, or a LIMIT that fills completely on arrival — does not take the handle, and the value is released the moment any order reaches a terminal state. It is therefore NOT an idempotency key, though on this replace path a retry cannot double-execute: the request names the original order id, and the sequencer revalidates that original in memory and on the book at sequence time, so once the first replacement succeeds the original is gone and a retry is rejected with ORDER_NOT_FOUND rather than placing a second order. That code is itself ambiguous — the original may instead have filled or been cancelled — so the risk here is acting on a stale view, not duplicate execution. Reconcile a lost response against the order WebSocket stream, which carries this value on the submit acknowledgement and on fills, including for orders that never rest; order history is replica-backed and can omit an order that did land. The stream is not replayable and has no sequence number to backfill from, and its fan-out is non-persistent Core NATS: the service can re-establish an ended upstream subscription without closing your socket, so events can be missed while your connection still looks healthy. A matching event is therefore positive proof the order was accepted, but silence is NEVER evidence it was not, and no client-observable condition makes it so. Absent positive evidence the outcome is unresolved: hold and escalate rather than resubmitting. A replace item carries no order type or time-in-force and its original must still be RESTING, so the IOC/FOK and MARKET post-acceptance rejection shapes are unreachable here. Failures split by WHEN they occur, and the difference decides whether your original survives. Before sequencing: every validation failure — a malformed value included — fails ITS ITEM alone with a structured error.code (INVALID_CLIENT_ORDER_ID for a malformed handle, the same code batch-create uses) and no mutation and no event, batch-create parity; the whole request 400s only for an empty or oversize batch. (Earlier releases rejected the whole batch for a malformed value here.) A pre-cancel gate then drops two more classes before anything is cancelled — a handle conflict, and a post-only replacement that would cross the book as it will stand once this batch's originals are cancelled — so in the ordinary POST_ONLY_WOULD_CROSS case the item fails with its original still RESTING and untouched. After that the endpoint is CANCEL-FIRST: the original is cancelled in pass 1, so a residual placement failure then — a self-trade rejection, or a crossing that only became apparent in pass 2 — leaves the original CANCELLED and emits its cancellation events (terminal reason 'replaced') while the item reports the placement error and no replacement is placed. Never assume a failed item left your original resting; read results[] and the stream. Single ReplaceOrder differs: it is atomic, and a rejected replacement leaves the original untouched. Where no surface is conclusive, do not resubmit. A replacement is a new order with a new id, so it carries its own value and inherits nothing from the original — restate it to keep the handle.
4999
+ * @description Client-assigned correlation handle, echoed back on order reads (detail and list) and on order WebSocket events. At most 64 characters from [A-Za-z0-9._:-]; surrounding whitespace is trimmed before storage, and a blank or whitespace-only value is treated as absent. Uniqueness is enforced only among your orders that are RESTING on the book: an item reusing a value another of your resting orders still holds fails that item alone — the batch itself returns 2xx / OK and the offending item's result slot carries error.code CLIENT_ORDER_ID_CONFLICT; no transport-level 409 / ALREADY_EXISTS is raised. An order that never rests — MARKET, IOC/FOK, or a LIMIT that fills completely on arrival — does not take the handle, and the value is released the moment any order reaches a terminal state. It is therefore NOT an idempotency key, though on this replace path a retry cannot double-execute: the request names the original order id, and the sequencer revalidates that original in memory and on the book at sequence time, so once the first replacement succeeds the original is gone and a retry is rejected with ORDER_NOT_FOUND rather than placing a second order. That code is itself ambiguous — the original may instead have filled or been cancelled — so the risk here is acting on a stale view, not duplicate execution. Reconcile a lost response against the order WebSocket stream, which carries this value on the submit acknowledgement and on fills, including for orders that never rest; order history is replica-backed and can omit an order that did land. The stream is not replayable and has no sequence number to backfill from, and events are not persisted for redelivery, so one can be missed while your connection still looks healthy. A matching event is therefore positive proof the order was accepted, but silence is NEVER evidence it was not, and no client-observable condition makes it so. Absent positive evidence the outcome is unresolved: hold and escalate rather than resubmitting. A replace item carries no order type or time-in-force and its original must still be RESTING, so the IOC/FOK and MARKET post-acceptance rejection shapes are unreachable here. Failures split by WHEN they occur, and the difference decides whether your original survives. Before sequencing: every validation failure — a malformed value included — fails ITS ITEM alone with a structured error.code (INVALID_CLIENT_ORDER_ID for a malformed handle, the same code batch-create uses) and no mutation and no event, batch-create parity; the whole request 400s only for an empty or oversize batch. (Earlier releases rejected the whole batch for a malformed value here.) A pre-cancel gate then drops two more classes before anything is cancelled — a handle conflict, and a post-only replacement that would cross the book as it will stand once this batch's originals are cancelled — so in the ordinary POST_ONLY_WOULD_CROSS case the item fails with its original still RESTING and untouched. After that the endpoint is CANCEL-FIRST: the original is cancelled in pass 1, so a residual placement failure then — a self-trade rejection, or a crossing that only became apparent in pass 2 — leaves the original CANCELLED and emits its cancellation events (terminal reason 'replaced') while the item reports the placement error and no replacement is placed. Never assume a failed item left your original resting; read results[] and the stream. Single ReplaceOrder differs: it is atomic, and a rejected replacement leaves the original untouched. Where no surface is conclusive, do not resubmit. A replacement is a new order with a new id, so it carries its own value and inherits nothing from the original — restate it to keep the handle.
4632
5000
  * @example quote-btc-1130-a
4633
5001
  */
4634
5002
  clientOrderId?: string | null;
@@ -4680,6 +5048,100 @@ export interface components {
4680
5048
  matchResult?: components["schemas"]["MatchResult"];
4681
5049
  error?: components["schemas"]["BatchReplaceError"];
4682
5050
  };
5051
+ /** @description A builder's identity: an application, or a display group of applications. */
5052
+ Builder: {
5053
+ /**
5054
+ * Format: uuid
5055
+ * @description Application UUID, or display group UUID when kind is group
5056
+ * @example 789e0123-e45b-12d3-a456-426614174000
5057
+ */
5058
+ id?: string | null;
5059
+ /**
5060
+ * @description application: one application. group: a display group of several applications shown as one builder.
5061
+ * @example application
5062
+ * @enum {string|null}
5063
+ */
5064
+ kind?: "application" | "group" | null;
5065
+ /**
5066
+ * @description Display name
5067
+ * @example Monaco SDK
5068
+ */
5069
+ name?: string | null;
5070
+ /**
5071
+ * @description Short display code, if set; also a lookup key
5072
+ * @example MON
5073
+ */
5074
+ code?: string | null;
5075
+ /**
5076
+ * @description Display color, #rrggbb or #rrggbbaa, if set
5077
+ * @example #112233
5078
+ */
5079
+ color?: string | null;
5080
+ /**
5081
+ * @description Shown as verified
5082
+ * @example true
5083
+ */
5084
+ verified?: boolean | null;
5085
+ /**
5086
+ * @description The display group an application is shown under on the directory and the
5087
+ * leaderboard, when it has one. Unset for a group and for an ungrouped
5088
+ * application.
5089
+ */
5090
+ group?: components["schemas"]["BuilderGroupRef"] | null;
5091
+ /**
5092
+ * @description The application itself (kind application), or the group's displayed
5093
+ * applications (kind group). Builder attribution on other responses (wallet
5094
+ * summaries, deposit and withdrawal feeds) may send this empty: there the
5095
+ * builder is an identity only.
5096
+ */
5097
+ applications?: components["schemas"]["BuilderApplication"][] | null;
5098
+ };
5099
+ /** @description One application behind a builder. */
5100
+ BuilderApplication: {
5101
+ /**
5102
+ * Format: uuid
5103
+ * @description Application UUID
5104
+ * @example 789e0123-e45b-12d3-a456-426614174000
5105
+ */
5106
+ id?: string | null;
5107
+ /**
5108
+ * @description Application name
5109
+ * @example Monaco SDK
5110
+ */
5111
+ name?: string | null;
5112
+ /**
5113
+ * @description On-chain client id the application's deposits carry
5114
+ * @example 6fe0da813f1a4adcbe675d52ca530a43
5115
+ */
5116
+ clientId?: string | null;
5117
+ /**
5118
+ * @description Whether the application can place new orders. An inactive builder keeps the volume it routed.
5119
+ * @example true
5120
+ */
5121
+ active?: boolean | null;
5122
+ /**
5123
+ * @description Whether the application is archived. Archived applications are left out of the builder directory but keep their figures.
5124
+ * @example false
5125
+ */
5126
+ archived?: boolean | null;
5127
+ /**
5128
+ * Format: int32
5129
+ * @description Taker add-on the application charges, in basis points
5130
+ * @example 0
5131
+ */
5132
+ additionalTakerFeeBps?: number | null;
5133
+ /**
5134
+ * Format: int32
5135
+ * @description Maker add-on the application charges, in basis points
5136
+ * @example 0
5137
+ */
5138
+ additionalMakerFeeBps?: number | null;
5139
+ /**
5140
+ * @description Whether this is the exchange's default application: the one a sign-in that names no client id is placed under
5141
+ * @example false
5142
+ */
5143
+ isDefault?: boolean | null;
5144
+ };
4683
5145
  BuilderFeeChange: {
4684
5146
  /**
4685
5147
  * @description Who made the change: `BUILDER` (this application's payout wallet) or `ADMIN` (Monaco, on the application's behalf).
@@ -4722,6 +5184,162 @@ export interface components {
4722
5184
  */
4723
5185
  newMakerBps?: number | null;
4724
5186
  };
5187
+ /** @description A group's identity, for an application shown under a display group. */
5188
+ BuilderGroupRef: {
5189
+ /**
5190
+ * Format: uuid
5191
+ * @description Display group UUID; GET /api/v1/analytics/builders/{id} answers the group
5192
+ * @example 5b1e2c9a-0f6d-4e8b-9a71-3c2d4e5f6a7b
5193
+ */
5194
+ id?: string | null;
5195
+ /**
5196
+ * @description The group's display name
5197
+ * @example Monaco
5198
+ */
5199
+ name?: string | null;
5200
+ /**
5201
+ * @description The group's display code, if it has one
5202
+ * @example MON
5203
+ */
5204
+ code?: string | null;
5205
+ };
5206
+ BuilderLeaderboardRow: {
5207
+ builder?: components["schemas"]["Builder"];
5208
+ /**
5209
+ * @description Taker volume in USD (USDC 1:1) of the trades the builder's applications took
5210
+ * @example 25000
5211
+ */
5212
+ volumeUsd?: string | null;
5213
+ /**
5214
+ * @description The spot part of volumeUsd
5215
+ * @example 0
5216
+ */
5217
+ spotVolumeUsd?: string | null;
5218
+ /**
5219
+ * @description The perpetual (margin) part of volumeUsd
5220
+ * @example 25000
5221
+ */
5222
+ perpVolumeUsd?: string | null;
5223
+ /**
5224
+ * Format: int64
5225
+ * @description Trades the builder's applications took
5226
+ * @example 120
5227
+ */
5228
+ tradesCount?: number | null;
5229
+ /**
5230
+ * @description The builder's own fee revenue in USD: taker add-ons on the trades it took plus maker add-ons on the trades it made. Never the protocol taker fee.
5231
+ * @example 12.5
5232
+ */
5233
+ feesUsd?: string | null;
5234
+ /**
5235
+ * @description The taker add-on part of feesUsd
5236
+ * @example 10
5237
+ */
5238
+ takerFeesUsd?: string | null;
5239
+ /**
5240
+ * @description The maker add-on part of feesUsd, earned on trades the builder's applications made, whoever took them
5241
+ * @example 2.5
5242
+ */
5243
+ makerFeesUsd?: string | null;
5244
+ /**
5245
+ * Format: int64
5246
+ * @description Wallets whose first trade through one of the builder's applications fell in the window, counted once per (application, wallet)
5247
+ * @example 4
5248
+ */
5249
+ newTraders?: number | null;
5250
+ /**
5251
+ * Format: int64
5252
+ * @description Distinct taker wallets that traded through the builder in the window, each once however many buckets or applications it traded in. With window=all, every wallet that ever traded through it. Null for a window counted in hours that starts before the 90 days its hourly sets are kept.
5253
+ * @example 18
5254
+ */
5255
+ activeTakers?: number | null;
5256
+ /**
5257
+ * @description USDC deposited through the builder's applications in the window, in USD (1:1). Other tokens are unvalued and not counted.
5258
+ * @example 15000
5259
+ */
5260
+ depositsUsd?: string | null;
5261
+ /**
5262
+ * @description USDC withdrawals initiated through the builder's applications in the window, in USD (1:1). Attributed by the application that initiated the withdrawal; other tokens are unvalued and not counted.
5263
+ * @example 4000
5264
+ */
5265
+ withdrawalsUsd?: string | null;
5266
+ /**
5267
+ * @description depositsUsd less withdrawalsUsd; negative when more left than arrived
5268
+ * @example 11000
5269
+ */
5270
+ netFlowUsd?: string | null;
5271
+ };
5272
+ BuilderSeriesPoint: {
5273
+ /**
5274
+ * Format: int64
5275
+ * @description Bucket start as Unix milliseconds (UTC; weeks start Monday)
5276
+ * @example 1762038000000
5277
+ */
5278
+ bucketStart?: number | null;
5279
+ /**
5280
+ * @description Taker volume in USD (USDC 1:1) of the trades the builder's applications took
5281
+ * @example 1200
5282
+ */
5283
+ volumeUsd?: string | null;
5284
+ /**
5285
+ * @description The spot part of volumeUsd
5286
+ * @example 0
5287
+ */
5288
+ spotVolumeUsd?: string | null;
5289
+ /**
5290
+ * @description The perpetual (margin) part of volumeUsd
5291
+ * @example 1200
5292
+ */
5293
+ perpVolumeUsd?: string | null;
5294
+ /**
5295
+ * Format: int64
5296
+ * @description Trades the builder's applications took
5297
+ * @example 120
5298
+ */
5299
+ tradesCount?: number | null;
5300
+ /**
5301
+ * @description The builder's own fee revenue in USD: taker add-ons on the trades it took plus maker add-ons on the trades it made. Never the protocol taker fee.
5302
+ * @example 12.5
5303
+ */
5304
+ feesUsd?: string | null;
5305
+ /**
5306
+ * @description The taker add-on part of feesUsd
5307
+ * @example 10
5308
+ */
5309
+ takerFeesUsd?: string | null;
5310
+ /**
5311
+ * @description The maker add-on part of feesUsd, earned on trades the builder's applications made, whoever took them
5312
+ * @example 2.5
5313
+ */
5314
+ makerFeesUsd?: string | null;
5315
+ /**
5316
+ * Format: int64
5317
+ * @description Distinct taker wallets that traded through the builder in the bucket
5318
+ * @example 3
5319
+ */
5320
+ activeTakers?: number | null;
5321
+ /**
5322
+ * Format: int64
5323
+ * @description Wallets whose first trade through one of the builder's applications fell in the bucket, counted once per (application, wallet)
5324
+ * @example 1
5325
+ */
5326
+ newTraders?: number | null;
5327
+ /**
5328
+ * @description USDC deposited through the builder's applications in the bucket, in USD (1:1)
5329
+ * @example 500
5330
+ */
5331
+ depositsUsd?: string | null;
5332
+ /**
5333
+ * @description USDC withdrawals initiated through the builder's applications in the bucket, in USD (1:1). Attributed by the application that initiated the withdrawal; other tokens are unvalued and not counted.
5334
+ * @example 4000
5335
+ */
5336
+ withdrawalsUsd?: string | null;
5337
+ /**
5338
+ * @description depositsUsd less withdrawalsUsd; negative when more left than arrived
5339
+ * @example 11000
5340
+ */
5341
+ netFlowUsd?: string | null;
5342
+ };
4725
5343
  BuildercodePayout: {
4726
5344
  /**
4727
5345
  * Format: uuid
@@ -4992,7 +5610,7 @@ export interface components {
4992
5610
  */
4993
5611
  clientId?: string | null;
4994
5612
  /**
4995
- * @description Optional chain ID supplied by SDK clients
5613
+ * @description Optional EVM chain ID supplied by SDK clients, as a JSON number or a decimal string (for example 1329 or "1329")
4996
5614
  * @example 1328
4997
5615
  */
4998
5616
  chainId?: string | null;
@@ -5055,6 +5673,11 @@ export interface components {
5055
5673
  * @example 1000000
5056
5674
  */
5057
5675
  amount: string;
5676
+ /**
5677
+ * @description Optional submission identity, shared with order create (same 1-64 characters from [A-Za-z0-9._:-], same per user and application namespace). Retrying the same key and request within 15 minutes of the original acceptance returns the original claim's result without moving money again; its payoutBalance and tradingBalance are the original claim's. The same key with a different request, or a key already used on another endpoint, returns IDEMPOTENCY_KEY_CONFLICT (HTTP 409 / gRPC ALREADY_EXISTS). ORDER_SUBMISSION_UNAVAILABLE and ORDER_SUBMISSION_CAPACITY_EXCEEDED (HTTP 503 / gRPC UNAVAILABLE) mean the outcome is held but cannot be read, or no new key can be accepted: retry with the same key and request. The window does not extend on retries; after it the key claims again. Generate a fresh key for each intended claim and keep it across retries of that claim.
5678
+ * @example claim-2026-10-28-001
5679
+ */
5680
+ idempotencyKey?: string | null;
5058
5681
  };
5059
5682
  ClaimBuildercodeRewardsResponse: {
5060
5683
  /**
@@ -5322,7 +5945,7 @@ export interface components {
5322
5945
  */
5323
5946
  quantity: string;
5324
5947
  /**
5325
- * @description Trading mode: SPOT or MARGIN (default: SPOT)
5948
+ * @description Trading mode: SPOT or MARGIN. Omitted, it takes the trading pair market type
5326
5949
  * @example SPOT
5327
5950
  */
5328
5951
  tradingMode?: string | null;
@@ -5384,8 +6007,8 @@ export interface components {
5384
6007
  takeProfit?: components["schemas"]["ParentTpSlLeg"];
5385
6008
  stopLoss?: components["schemas"]["ParentTpSlLeg"];
5386
6009
  /**
5387
- * @description Strategy key used to group risk buckets for delegated/margin orders
5388
- * @example my-strategy
6010
+ * @description Sub-account key of the margin account the order trades on, like marginAccountId (`default` is the default margin account). Refused when it is not a valid sub-account key or disagrees with marginAccountId; a key naming none of the caller's open sub-accounts is refused by the matching engine.
6011
+ * @example hedge
5389
6012
  */
5390
6013
  strategyKey?: string | null;
5391
6014
  /**
@@ -5400,7 +6023,7 @@ export interface components {
5400
6023
  */
5401
6024
  postOnly?: boolean | null;
5402
6025
  /**
5403
- * @description Client-assigned correlation handle, echoed back on order reads (detail and list) and on order WebSocket events. At most 64 characters from [A-Za-z0-9._:-]; surrounding whitespace is trimmed before storage, and a blank or whitespace-only value is treated as absent. Uniqueness is enforced only among your orders that are RESTING on the book: a create or replace reusing a value another of your resting orders still holds is rejected with HTTP 409 / gRPC ALREADY_EXISTS and the code CLIENT_ORDER_ID_CONFLICT. An order that never rests — MARKET, IOC/FOK, or a LIMIT that fills completely on arrival — does not take the handle, and the value is released the moment any order reaches a terminal state. It is therefore NOT an idempotency key: resubmitting after a lost response can execute a second time. Reconcile a lost response against the order WebSocket stream, which carries this value on the submit acknowledgement and on fills, including for orders that never rest; order history is replica-backed and can omit an order that did land. The stream is not replayable and has no sequence number to backfill from, and its fan-out is non-persistent Core NATS: the service can re-establish an ended upstream subscription without closing your socket, so events can be missed while your connection still looks healthy. A matching event is therefore positive proof the order was accepted, but silence is NEVER evidence it was not, and no client-observable condition makes it so. Absent positive evidence the outcome is unresolved: hold and escalate rather than resubmitting. Rejections split in two: one rejected before acceptance (malformed, post-only would cross, handle conflict, a plain MARKET submit with no liquidity, rejected during pricing) fails the request, emits no event and is never written to order history (an order rejected AFTER acceptance is persisted with status REJECTED, so only the pre-acceptance class is absent); an accepted LIMIT with IOC or FOK that cannot fill, or an accepted MARKET order whose apparent liquidity is invalidated by maker-risk revalidation, returns 2xx with matchResult.status REJECTED and emits OrderPlaced then OrderRejected, both carrying this value. A 2xx therefore does not mean the order executed. Where no surface is conclusive, do not resubmit.
6026
+ * @description Client-assigned correlation handle, echoed back on order reads (detail and list) and on order WebSocket events. At most 64 characters from [A-Za-z0-9._:-]; surrounding whitespace is trimmed before storage, and a blank or whitespace-only value is treated as absent. Uniqueness is enforced only among your orders that are RESTING on the book: a create or replace reusing a value another of your resting orders still holds is rejected with HTTP 409 / gRPC ALREADY_EXISTS and the code CLIENT_ORDER_ID_CONFLICT. An order that never rests — MARKET, IOC/FOK, or a LIMIT that fills completely on arrival — does not take the handle, and the value is released the moment any order reaches a terminal state. It is therefore NOT an idempotency key: resubmitting after a lost response can execute a second time. Reconcile a lost response against the order WebSocket stream, which carries this value on the submit acknowledgement and on fills, including for orders that never rest; order history is replica-backed and can omit an order that did land. The stream is not replayable and has no sequence number to backfill from, and events are not persisted for redelivery, so one can be missed while your connection still looks healthy. A matching event is therefore positive proof the order was accepted, but silence is NEVER evidence it was not, and no client-observable condition makes it so. Absent positive evidence the outcome is unresolved: hold and escalate rather than resubmitting. Rejections split in two: one rejected before acceptance (malformed, post-only would cross, handle conflict, a plain MARKET submit with no liquidity, rejected during pricing) fails the request, emits no event and is never written to order history (an order rejected AFTER acceptance is persisted with status REJECTED, so only the pre-acceptance class is absent); an accepted LIMIT with IOC or FOK that cannot fill, or an accepted MARKET order whose apparent liquidity is invalidated by maker-risk revalidation, returns 2xx with matchResult.status REJECTED and emits OrderPlaced then OrderRejected, both carrying this value. A 2xx therefore does not mean the order executed. Where no surface is conclusive, do not resubmit.
5404
6027
  * @example quote-btc-1130-a
5405
6028
  */
5406
6029
  clientOrderId?: string | null;
@@ -5453,7 +6076,7 @@ export interface components {
5453
6076
  * @description Resolved isolated risk bucket UUID for risk-bucket-scoped margin orders
5454
6077
  */
5455
6078
  riskBucketId?: string | null;
5456
- /** @description Client strategy key carried for compatibility */
6079
+ /** @description The request's strategyKey (the sub-account key), echoed */
5457
6080
  strategyKey?: string | null;
5458
6081
  /**
5459
6082
  * Format: uuid
@@ -5566,7 +6189,7 @@ export interface components {
5566
6189
  */
5567
6190
  reduceOnly?: boolean | null;
5568
6191
  /**
5569
- * @description Trading mode: SPOT or MARGIN (default: SPOT)
6192
+ * @description Trading mode: SPOT or MARGIN. Omitted, it takes the trading pair market type. A mode that does not match the pair is rejected
5570
6193
  * @example SPOT
5571
6194
  */
5572
6195
  tradingMode?: string | null;
@@ -5594,8 +6217,8 @@ export interface components {
5594
6217
  */
5595
6218
  leverage?: string | null;
5596
6219
  /**
5597
- * @description Strategy key used to group risk buckets for margin orders
5598
- * @example my-strategy
6220
+ * @description Sub-account key of the margin account the order trades on, like marginAccountId (`default` is the default margin account). Refused when it is not a valid sub-account key or disagrees with marginAccountId; a key naming none of the caller's open sub-accounts is refused by the matching engine.
6221
+ * @example hedge
5599
6222
  */
5600
6223
  strategyKey?: string | null;
5601
6224
  /**
@@ -6176,6 +6799,85 @@ export interface components {
6176
6799
  */
6177
6800
  nextPageToken?: string | null;
6178
6801
  };
6802
+ GetBuilderResponse: {
6803
+ builder?: components["schemas"]["Builder"];
6804
+ };
6805
+ GetBuilderSeriesResponse: {
6806
+ window?: components["schemas"]["AnalyticsWindow"];
6807
+ builder?: components["schemas"]["Builder"];
6808
+ /**
6809
+ * @description One point per bucket of the window, oldest first. A bucket without
6810
+ * trades is present with zeros.
6811
+ */
6812
+ points?: components["schemas"]["BuilderSeriesPoint"][] | null;
6813
+ };
6814
+ GetBuilderTotalsResponse: {
6815
+ window?: components["schemas"]["AnalyticsWindow"];
6816
+ builder?: components["schemas"]["Builder"];
6817
+ /**
6818
+ * @description Taker volume in USD (USDC 1:1) of the trades the builder's applications took
6819
+ * @example 25000
6820
+ */
6821
+ volumeUsd?: string | null;
6822
+ /**
6823
+ * @description The spot part of volumeUsd
6824
+ * @example 0
6825
+ */
6826
+ spotVolumeUsd?: string | null;
6827
+ /**
6828
+ * @description The perpetual (margin) part of volumeUsd
6829
+ * @example 25000
6830
+ */
6831
+ perpVolumeUsd?: string | null;
6832
+ /**
6833
+ * Format: int64
6834
+ * @description Trades the builder's applications took
6835
+ * @example 120
6836
+ */
6837
+ tradesCount?: number | null;
6838
+ /**
6839
+ * @description The builder's own fee revenue in USD: taker add-ons on the trades it took plus maker add-ons on the trades it made. Never the protocol taker fee.
6840
+ * @example 12.5
6841
+ */
6842
+ feesUsd?: string | null;
6843
+ /**
6844
+ * @description The taker add-on part of feesUsd
6845
+ * @example 10
6846
+ */
6847
+ takerFeesUsd?: string | null;
6848
+ /**
6849
+ * @description The maker add-on part of feesUsd, earned on trades the builder's applications made, whoever took them
6850
+ * @example 2.5
6851
+ */
6852
+ makerFeesUsd?: string | null;
6853
+ /**
6854
+ * Format: int64
6855
+ * @description Distinct taker wallets that traded through the builder in the window, each once however many buckets or applications it traded in
6856
+ * @example 18
6857
+ */
6858
+ activeTakers?: number | null;
6859
+ /**
6860
+ * Format: int64
6861
+ * @description Wallets whose first trade through one of the builder's applications fell in the window, counted once per (application, wallet)
6862
+ * @example 4
6863
+ */
6864
+ newTraders?: number | null;
6865
+ /**
6866
+ * @description USDC deposited through the builder's applications in the window, in USD (1:1). Other tokens are unvalued and not counted.
6867
+ * @example 15000
6868
+ */
6869
+ depositsUsd?: string | null;
6870
+ /**
6871
+ * @description USDC withdrawals initiated through the builder's applications in the window, in USD (1:1). Attributed by the application that initiated the withdrawal; other tokens are unvalued and not counted.
6872
+ * @example 4000
6873
+ */
6874
+ withdrawalsUsd?: string | null;
6875
+ /**
6876
+ * @description depositsUsd less withdrawalsUsd; negative when more left than arrived
6877
+ * @example 11000
6878
+ */
6879
+ netFlowUsd?: string | null;
6880
+ };
6179
6881
  GetBuildercodePayoutSummaryResponse: {
6180
6882
  /**
6181
6883
  * Format: int64
@@ -6484,6 +7186,7 @@ export interface components {
6484
7186
  label?: string | null;
6485
7187
  /** Format: uuid */
6486
7188
  tradingPairId?: string | null;
7189
+ /** @description The margin account's sub-account key (`default` for the default account). */
6487
7190
  strategyKey?: string | null;
6488
7191
  riskBucketId?: string | null;
6489
7192
  marginMode?: string | null;
@@ -7037,6 +7740,16 @@ export interface components {
7037
7740
  * @example -0.1
7038
7741
  */
7039
7742
  placementMakerFeeBps?: string | null;
7743
+ /**
7744
+ * Format: uuid
7745
+ * @description The RFQ (block trade) this order filled in: set on RFQ orders only (origin RFQ). Read the RFQ itself with GetRfq.
7746
+ */
7747
+ rfqId?: string | null;
7748
+ /**
7749
+ * Format: uuid
7750
+ * @description Set on a maker's RFQ quote order only: the quote version's internal engine id the order rested for. It is not the public quoteId; the taker's order, which fills from several quotes, carries none.
7751
+ */
7752
+ rfqQuoteId?: string | null;
7040
7753
  };
7041
7754
  /** @description Orderbook snapshot with token metadata and sequence number. */
7042
7755
  GetOrderbookResponse: {
@@ -7081,7 +7794,7 @@ export interface components {
7081
7794
  quoteToken?: string | null;
7082
7795
  /**
7083
7796
  * Format: uint32
7084
- * @description Orderbook sequence number
7797
+ * @description Legacy orderbook sequence number; not a book version, and its basis can change, so do not compare it across snapshots. Always 0 above 100 levels, where bookSeq versions the snapshot; at 100 or fewer levels no field versions it.
7085
7798
  * @example 12345
7086
7799
  */
7087
7800
  sequenceNumber?: number | null;
@@ -7095,6 +7808,11 @@ export interface components {
7095
7808
  * @example Spot
7096
7809
  */
7097
7810
  tradingMode?: string | null;
7811
+ /**
7812
+ * @description Durable-log sequence this snapshot is exact as of, as a decimal string. Present only above 100 levels. A point-in-time read and staleness check, not a base for applying WebSocket deltas: for a live local book use the depth WebSocket channel, whose snapshot is the handoff base. A side that returns as many levels as requested may hold more.
7813
+ * @example 184467
7814
+ */
7815
+ bookSeq?: string | null;
7098
7816
  };
7099
7817
  GetPerpMarketConfigResponse: {
7100
7818
  /** Format: uuid */
@@ -7584,20 +8302,6 @@ export interface components {
7584
8302
  * @example 2023-11-13T10:30:00Z
7585
8303
  */
7586
8304
  createdAt?: string | null;
7587
- /**
7588
- * Format: int32
7589
- * @deprecated
7590
- * @description DEPRECATED: legacy flat maker fee in bps echoed from the trading pair. Does NOT reflect the tiered fee actually charged, which is per-user and fractional. Call GET /api/v1/fees/tier for the caller's real rate. Will be removed in a later release.
7591
- * @example -1
7592
- */
7593
- makerFeeBps?: number | null;
7594
- /**
7595
- * Format: int32
7596
- * @deprecated
7597
- * @description DEPRECATED: legacy flat taker fee in bps echoed from the trading pair. Does NOT reflect the tiered fee actually charged, which is per-user and fractional. Call GET /api/v1/fees/tier for the caller's real rate. Will be removed in a later release.
7598
- * @example 5
7599
- */
7600
- takerFeeBps?: number | null;
7601
8305
  /**
7602
8306
  * Format: int32
7603
8307
  * @description Additional taker fee in basis points from application
@@ -7611,45 +8315,127 @@ export interface components {
7611
8315
  */
7612
8316
  applicationMakerFeeBps?: number | null;
7613
8317
  };
7614
- GetPulseResponse: {
8318
+ GetProtocolSeriesResponse: {
8319
+ /** @description The window the series covers */
8320
+ window?: components["schemas"]["AnalyticsWindow"] | null;
7615
8321
  /**
7616
- * @description When this snapshot was produced upstream, ISO-8601 UTC; also serves as the response ETag value
7617
- * @example 2026-07-22T15:17:14Z
8322
+ * @description One point per bucket of the window, oldest first. A bucket without
8323
+ * trades is present with zeros.
7618
8324
  */
7619
- generatedAt?: string | null;
8325
+ points?: components["schemas"]["ProtocolSeriesPoint"][] | null;
8326
+ };
8327
+ GetProtocolTotalsResponse: {
8328
+ /** @description The window these totals cover */
8329
+ window?: components["schemas"]["AnalyticsWindow"] | null;
7620
8330
  /**
7621
- * @description Asset universe this snapshot was synthesized against
7622
- * @example [
7623
- * "BTC",
7624
- * "ETH",
7625
- * "SOL",
7626
- * "SEI",
7627
- * "HYPE"
7628
- * ]
8331
+ * @description Taker volume in USD (USDC 1:1) routed by the builders the explorer displays. Trades of hidden builders are not counted.
8332
+ * @example 1250000.5
7629
8333
  */
7630
- watchlist?: string[] | null;
7631
- /** @description Pulse items, pre-sorted: watchlist order first, MARKET last, most-recent-first within each asset. Items with unverified figures are removed server-side. */
7632
- items?: components["schemas"]["PulseItem"][] | null;
7633
- };
7634
- GetRegionStatusResponse: {
8334
+ volumeUsd?: string | null;
7635
8335
  /**
7636
- * @description True when trading is not available in the caller's region; writes other than signing in and withdrawing then answer 451 REGION_RESTRICTED
7637
- * @example false
8336
+ * @description The spot part of volumeUsd (displayed builders only)
8337
+ * @example 250000.5
7638
8338
  */
7639
- restricted?: boolean | null;
8339
+ spotVolumeUsd?: string | null;
7640
8340
  /**
7641
- * @description The caller's ISO 3166-1 alpha-2 country code as the edge geolocated it (T1 for Tor, XX for unknown); empty when the request carried no location
7642
- * @example JP
8341
+ * @description The perpetual (margin) part of volumeUsd (displayed builders only)
8342
+ * @example 1000000
7643
8343
  */
7644
- country?: string | null;
7645
- };
7646
- GetRewardsBalanceResponse: {
7647
- /** @description One entry per reward token that has a non-zero available balance. */
7648
- balances?: components["schemas"]["RewardsBalanceEntry"][] | null;
7649
- };
7650
- GetRfqCapabilitiesResponse: {
7651
- /** Format: uint32 */
7652
- protocolVersion?: number | null;
8344
+ perpVolumeUsd?: string | null;
8345
+ /**
8346
+ * Format: int64
8347
+ * @description Trades routed by the displayed builders
8348
+ * @example 4210
8349
+ */
8350
+ tradesCount?: number | null;
8351
+ /**
8352
+ * @description Protocol taker fees in USD over every trade, all builders included. Excludes builder add-ons and maker fees.
8353
+ * @example 625.25
8354
+ */
8355
+ protocolFeesUsd?: string | null;
8356
+ /**
8357
+ * Format: int64
8358
+ * @description Distinct taker wallets that traded in the window (each wallet once however many buckets it traded in), all builders included
8359
+ * @example 312
8360
+ */
8361
+ activeTakers?: number | null;
8362
+ /**
8363
+ * Format: int64
8364
+ * @description Wallets whose first trade through a builder fell in the window, counted once per (builder, wallet), all builders included
8365
+ * @example 27
8366
+ */
8367
+ newTraders?: number | null;
8368
+ /**
8369
+ * @description Total value locked in USD at the end of the window (the end of the bucket holding endTime): USDC custody, deposits less initiated withdrawals, valued 1:1. Null when no custody had been folded by then.
8370
+ * @example 536172600
8371
+ */
8372
+ tvlUsd?: string | null;
8373
+ /**
8374
+ * @description Total value locked in USD at the start of the window (the start of its first bucket). tvlUsd less openingTvlUsd is the window's change. Null when no custody had been folded by then.
8375
+ * @example 535000000
8376
+ */
8377
+ openingTvlUsd?: string | null;
8378
+ /**
8379
+ * @description USDC deposited in the window, in USD (1:1). Other tokens are unvalued and not counted.
8380
+ * @example 1250000
8381
+ */
8382
+ depositsUsd?: string | null;
8383
+ /**
8384
+ * @description USDC withdrawals initiated in the window, in USD (1:1). Other tokens are unvalued and not counted.
8385
+ * @example 78000
8386
+ */
8387
+ withdrawalsUsd?: string | null;
8388
+ /**
8389
+ * @description depositsUsd less withdrawalsUsd; negative when more left than arrived
8390
+ * @example 1172000
8391
+ */
8392
+ netFlowUsd?: string | null;
8393
+ /**
8394
+ * Format: int64
8395
+ * @description Distinct wallets active in the window, each once: wallets that took a trade, received a deposit, or were paid out a withdrawal initiated in it (by payout address), all builders included
8396
+ * @example 418
8397
+ */
8398
+ activeAccounts?: number | null;
8399
+ };
8400
+ GetPulseResponse: {
8401
+ /**
8402
+ * @description When this snapshot was produced upstream, ISO-8601 UTC; also serves as the response ETag value
8403
+ * @example 2026-07-22T15:17:14Z
8404
+ */
8405
+ generatedAt?: string | null;
8406
+ /**
8407
+ * @description Asset universe this snapshot was synthesized against
8408
+ * @example [
8409
+ * "BTC",
8410
+ * "ETH",
8411
+ * "SOL",
8412
+ * "SEI",
8413
+ * "HYPE"
8414
+ * ]
8415
+ */
8416
+ watchlist?: string[] | null;
8417
+ /** @description Pulse items, pre-sorted: watchlist order first, MARKET last, most-recent-first within each asset. Items with unverified figures are removed server-side. */
8418
+ items?: components["schemas"]["PulseItem"][] | null;
8419
+ };
8420
+ GetRegionStatusResponse: {
8421
+ /**
8422
+ * @description True when trading is not available in the caller's region; writes other than signing in and withdrawing then answer 451 REGION_RESTRICTED
8423
+ * @example false
8424
+ */
8425
+ restricted?: boolean | null;
8426
+ /**
8427
+ * @description The caller's ISO 3166-1 alpha-2 country code as the edge geolocated it (T1 for Tor, XX for unknown); empty when the request carried no location
8428
+ * @example JP
8429
+ */
8430
+ country?: string | null;
8431
+ };
8432
+ GetRewardsBalanceResponse: {
8433
+ /** @description One entry per reward token that has a non-zero available balance. */
8434
+ balances?: components["schemas"]["RewardsBalanceEntry"][] | null;
8435
+ };
8436
+ GetRfqCapabilitiesResponse: {
8437
+ /** Format: uint32 */
8438
+ protocolVersion?: number | null;
7653
8439
  /** @description Whether RFQ is enabled for the caller */
7654
8440
  enabled?: boolean | null;
7655
8441
  markets?: components["schemas"]["RfqMarketCapability"][] | null;
@@ -7701,6 +8487,9 @@ export interface components {
7701
8487
  */
7702
8488
  totalPages?: number | null;
7703
8489
  };
8490
+ GetTokenCustodyResponse: {
8491
+ token?: components["schemas"]["TokenCustody"];
8492
+ };
7704
8493
  /** @description A single trade. */
7705
8494
  GetTradeByIdResponse: {
7706
8495
  data?: components["schemas"]["TradeData"];
@@ -7823,6 +8612,20 @@ export interface components {
7823
8612
  GetTradingPairResponse: {
7824
8613
  tradingPair?: components["schemas"]["TradingPairData"];
7825
8614
  };
8615
+ /** @description The treasury's all-time net fees. Not windowed: the treasury keeps only running totals. */
8616
+ GetTreasuryNetFeesResponse: {
8617
+ /**
8618
+ * @description All-time net protocol fees in USD (USDC 1:1): the treasury's net protocol fee (taker fees less maker rebates) plus the insurance fund's liquidation fees, less BuilderCodes payouts and TraderCodes rewards. Negative when payouts exceed fees; "0" before any fee. The definition may widen to more fee sources without a contract change.
8619
+ * @example 260.37
8620
+ */
8621
+ netFeesUsd?: string | null;
8622
+ /**
8623
+ * Format: int64
8624
+ * @description When the first counted fee landed, as Unix milliseconds; null before any
8625
+ * @example 1750000000000
8626
+ */
8627
+ countingSince?: number | null;
8628
+ };
7826
8629
  GetTwapOrderTcaResponse: {
7827
8630
  /**
7828
8631
  * Format: uuid
@@ -7934,6 +8737,33 @@ export interface components {
7934
8737
  */
7935
8738
  totalCapped?: boolean | null;
7936
8739
  };
8740
+ GetWalletSummaryResponse: {
8741
+ /**
8742
+ * @description The wallet, lowercase
8743
+ * @example 0x1234567890abcdef1234567890abcdef12345678
8744
+ */
8745
+ wallet?: string | null;
8746
+ /**
8747
+ * @description All-time totals over every builder; null when the wallet never took a
8748
+ * trade.
8749
+ */
8750
+ totals?: components["schemas"]["WalletVolume"] | null;
8751
+ /** @description Per displayed builder, largest volume first (ties by builder id). */
8752
+ builders?: components["schemas"]["WalletBuilderVolume"][] | null;
8753
+ /** @description What hidden builders carried; null when they carried nothing. */
8754
+ unattributed?: components["schemas"]["WithheldVolume"] | null;
8755
+ /**
8756
+ * Format: int64
8757
+ * @description Liquidation events of the wallet, every market
8758
+ * @example 2
8759
+ */
8760
+ liquidationsCount?: number | null;
8761
+ /**
8762
+ * @description Sum of each event's position size times its event-time mark price, in each market's quote units (every market is USDC-quoted today); "0" when never liquidated
8763
+ * @example 23852.5625
8764
+ */
8765
+ liquidationsNotional?: string | null;
8766
+ };
7937
8767
  IndexComponent: {
7938
8768
  provider?: string | null;
7939
8769
  price?: string | null;
@@ -8511,6 +9341,15 @@ export interface components {
8511
9341
  /** @description Cursor for the next page; empty when there are no more. */
8512
9342
  nextPageToken?: string | null;
8513
9343
  };
9344
+ ListBuilderLeaderboardResponse: {
9345
+ window?: components["schemas"]["AnalyticsWindow"];
9346
+ /**
9347
+ * @description Displayed builders with figures in the window, largest volume first
9348
+ * (ties by builder id), up to limit. A builder that only earned maker
9349
+ * add-ons, or only took deposits, ranks with zero volume.
9350
+ */
9351
+ rows?: components["schemas"]["BuilderLeaderboardRow"][] | null;
9352
+ };
8514
9353
  ListBuildercodePayoutsResponse: {
8515
9354
  /** @description Per-trade credits, newest first. */
8516
9355
  payouts?: components["schemas"]["BuildercodePayout"][] | null;
@@ -8536,6 +9375,13 @@ export interface components {
8536
9375
  */
8537
9376
  nextPageToken?: string | null;
8538
9377
  };
9378
+ ListBuildersResponse: {
9379
+ /**
9380
+ * @description Every displayed builder, by name (case-insensitive) then id. A display
9381
+ * group is listed once; its applications are not listed on their own.
9382
+ */
9383
+ builders?: components["schemas"]["Builder"][] | null;
9384
+ };
8539
9385
  ListConditionalOrdersResponse: {
8540
9386
  orders?: components["schemas"]["ConditionalOrder"][] | null;
8541
9387
  /**
@@ -8727,6 +9573,15 @@ export interface components {
8727
9573
  */
8728
9574
  nextPageToken?: string | null;
8729
9575
  };
9576
+ ListMarketVolumesResponse: {
9577
+ /** @description The window these volumes cover */
9578
+ window?: components["schemas"]["AnalyticsWindow"] | null;
9579
+ /**
9580
+ * @description Markets that traded in the window, largest volume first (ties by
9581
+ * trading pair id), up to limit.
9582
+ */
9583
+ markets?: components["schemas"]["MarketVolume"][] | null;
9584
+ };
8730
9585
  ListMyFollowersResponse: {
8731
9586
  followers?: components["schemas"]["Follower"][] | null;
8732
9587
  /** @description Cursor for the next page; empty when there are no more. */
@@ -8843,6 +9698,18 @@ export interface components {
8843
9698
  */
8844
9699
  total?: number | null;
8845
9700
  };
9701
+ ListTokenCustodyResponse: {
9702
+ /**
9703
+ * @description Listed assets by symbol, then tokens with custody flow but no listed
9704
+ * asset, by contract address.
9705
+ */
9706
+ tokens?: components["schemas"]["TokenCustody"][] | null;
9707
+ /**
9708
+ * @description Total value locked in USD: the custodyUsd of the tokens that count toward it
9709
+ * @example 536172600
9710
+ */
9711
+ tvlUsd?: string | null;
9712
+ };
8846
9713
  /** @description One page of the trade feed, newest first. */
8847
9714
  ListTradesResponse: {
8848
9715
  trades?: components["schemas"]["PublicTrade"][] | null;
@@ -8935,6 +9802,44 @@ export interface components {
8935
9802
  */
8936
9803
  nextPageToken?: string | null;
8937
9804
  };
9805
+ ListVaultDepositsResponse: {
9806
+ deposits?: components["schemas"]["VaultDeposit"][] | null;
9807
+ /**
9808
+ * Format: uint32
9809
+ * @description Number of deposits requested for this page
9810
+ * @example 50
9811
+ */
9812
+ pageSize?: number | null;
9813
+ /** @description Opaque cursor for the next page; empty when the page is the end of the ordered result */
9814
+ nextPageToken?: string | null;
9815
+ };
9816
+ ListVaultWithdrawalsResponse: {
9817
+ withdrawals?: components["schemas"]["VaultWithdrawal"][] | null;
9818
+ /**
9819
+ * Format: uint32
9820
+ * @description Number of withdrawals requested for this page
9821
+ * @example 50
9822
+ */
9823
+ pageSize?: number | null;
9824
+ /** @description Opaque cursor for the next page; empty when the page is the end of the ordered result */
9825
+ nextPageToken?: string | null;
9826
+ };
9827
+ ListWalletLeaderboardResponse: {
9828
+ /** @description Wallets by all-time volume, largest first (ties by wallet), up to limit. */
9829
+ wallets?: components["schemas"]["WalletVolume"][] | null;
9830
+ };
9831
+ ListWalletLiquidationsResponse: {
9832
+ /** @description The wallet's events in reverse chronological order, every market. */
9833
+ events?: components["schemas"]["LiquidationEvent"][] | null;
9834
+ /**
9835
+ * Format: uint32
9836
+ * @description Number of events requested for this page
9837
+ * @example 50
9838
+ */
9839
+ pageSize?: number | null;
9840
+ /** @description Opaque cursor for the next page; empty when the page is the end of the ordered result */
9841
+ nextPageToken?: string | null;
9842
+ };
8938
9843
  ManagedMarketAssignment: {
8939
9844
  launchId?: string | null;
8940
9845
  /** Format: uuid */
@@ -9028,6 +9933,7 @@ export interface components {
9028
9933
  label?: string | null;
9029
9934
  /** Format: uuid */
9030
9935
  tradingPairId?: string | null;
9936
+ /** @description The margin account's sub-account key (`default` for the default account). */
9031
9937
  strategyKey?: string | null;
9032
9938
  /** @description Present only for risk-bucket summary rows. */
9033
9939
  riskBucketId?: string | null;
@@ -9124,6 +10030,31 @@ export interface components {
9124
10030
  */
9125
10031
  maxRemovableCollateral?: string | null;
9126
10032
  };
10033
+ /** @description One market's figures over the window, all builders included. Resolve the symbol from the trading pairs listing. */
10034
+ MarketVolume: {
10035
+ /**
10036
+ * Format: uuid
10037
+ * @description Trading pair UUID
10038
+ * @example 123e4567-e89b-12d3-a456-426614174000
10039
+ */
10040
+ tradingPairId?: string | null;
10041
+ /**
10042
+ * @description Taker volume in USD over every trade in the market
10043
+ * @example 830000
10044
+ */
10045
+ volumeUsd?: string | null;
10046
+ /**
10047
+ * @description Protocol taker fees in USD
10048
+ * @example 415
10049
+ */
10050
+ protocolFeesUsd?: string | null;
10051
+ /**
10052
+ * Format: int64
10053
+ * @description Trades in the market
10054
+ * @example 2100
10055
+ */
10056
+ tradesCount?: number | null;
10057
+ };
9127
10058
  MatchResult: {
9128
10059
  /**
9129
10060
  * Format: int32
@@ -10047,6 +10978,72 @@ export interface components {
10047
10978
  */
10048
10979
  orderCount?: number | null;
10049
10980
  };
10981
+ ProtocolSeriesPoint: {
10982
+ /**
10983
+ * Format: int64
10984
+ * @description Bucket start as Unix milliseconds (UTC; weeks start Monday)
10985
+ * @example 1762038000000
10986
+ */
10987
+ bucketStart?: number | null;
10988
+ /**
10989
+ * @description Taker volume in USD routed by the displayed builders. Trades of hidden builders are not counted.
10990
+ * @example 52000
10991
+ */
10992
+ volumeUsd?: string | null;
10993
+ /**
10994
+ * @description The spot part of volumeUsd (displayed builders only)
10995
+ * @example 12000
10996
+ */
10997
+ spotVolumeUsd?: string | null;
10998
+ /**
10999
+ * @description The perpetual (margin) part of volumeUsd (displayed builders only)
11000
+ * @example 40000
11001
+ */
11002
+ perpVolumeUsd?: string | null;
11003
+ /**
11004
+ * Format: int64
11005
+ * @description Trades routed by the displayed builders
11006
+ * @example 180
11007
+ */
11008
+ tradesCount?: number | null;
11009
+ /**
11010
+ * @description Protocol taker fees in USD over every trade, all builders included
11011
+ * @example 26
11012
+ */
11013
+ protocolFeesUsd?: string | null;
11014
+ /**
11015
+ * Format: int64
11016
+ * @description Distinct taker wallets that traded in the bucket, all builders included
11017
+ * @example 41
11018
+ */
11019
+ activeTakers?: number | null;
11020
+ /**
11021
+ * Format: int64
11022
+ * @description Wallets whose first trade through a builder fell in the bucket, counted once per (builder, wallet), all builders included
11023
+ * @example 3
11024
+ */
11025
+ newTraders?: number | null;
11026
+ /**
11027
+ * @description Total value locked in USD at the end of the bucket: USDC custody, deposits less initiated withdrawals, valued 1:1. Carried across buckets without custody movement; null before the first folded custody hour.
11028
+ * @example 536172600
11029
+ */
11030
+ tvlUsd?: string | null;
11031
+ /**
11032
+ * @description USDC deposited in the bucket, in USD (1:1)
11033
+ * @example 52000
11034
+ */
11035
+ depositsUsd?: string | null;
11036
+ /**
11037
+ * @description USDC withdrawals initiated in the bucket, in USD (1:1)
11038
+ * @example 3000
11039
+ */
11040
+ withdrawalsUsd?: string | null;
11041
+ /**
11042
+ * @description depositsUsd less withdrawalsUsd; negative when more left than arrived
11043
+ * @example 49000
11044
+ */
11045
+ netFlowUsd?: string | null;
11046
+ };
10050
11047
  PublicHealthCheckResponse: {
10051
11048
  /**
10052
11049
  * @description Health status: healthy or unhealthy
@@ -10394,7 +11391,7 @@ export interface components {
10394
11391
  */
10395
11392
  postOnly?: boolean | null;
10396
11393
  /**
10397
- * @description Client-assigned correlation handle, echoed back on order reads (detail and list) and on order WebSocket events. At most 64 characters from [A-Za-z0-9._:-]; surrounding whitespace is trimmed before storage, and a blank or whitespace-only value is treated as absent. Uniqueness is enforced only among your orders that are RESTING on the book: a create or replace reusing a value another of your resting orders still holds is rejected with HTTP 409 / gRPC ALREADY_EXISTS and the code CLIENT_ORDER_ID_CONFLICT. An order that never rests — MARKET, IOC/FOK, or a LIMIT that fills completely on arrival — does not take the handle, and the value is released the moment any order reaches a terminal state. It is therefore NOT an idempotency key, though on this replace path a retry cannot double-execute: the request names the original order id, and the sequencer revalidates that original in memory and on the book at sequence time, so once the first replacement succeeds the original is gone and a retry is rejected with ORDER_NOT_FOUND rather than placing a second order. That code is itself ambiguous — the original may instead have filled or been cancelled — so the risk here is acting on a stale view, not duplicate execution. Reconcile a lost response against the order WebSocket stream, which carries this value on the submit acknowledgement and on fills, including for orders that never rest; order history is replica-backed and can omit an order that did land. The stream is not replayable and has no sequence number to backfill from, and its fan-out is non-persistent Core NATS: the service can re-establish an ended upstream subscription without closing your socket, so events can be missed while your connection still looks healthy. A matching event is therefore positive proof the order was accepted, but silence is NEVER evidence it was not, and no client-observable condition makes it so. Absent positive evidence the outcome is unresolved: hold and escalate rather than resubmitting. A replacement carries no order type or time-in-force and its original must still be RESTING, so the post-acceptance rejection shapes are unreachable here: the reachable failures are all pre-acceptance — malformed, post-only would cross, handle conflict, or the original no longer resting (ORDER_NOT_FOUND) — and each fails the request, emits no event and is never written to order history (an order rejected AFTER acceptance is persisted with status REJECTED, so only the pre-acceptance class is absent). Where no surface is conclusive, do not resubmit. A replacement is a new order with a new id, so it carries its own value and inherits nothing from the original — restate it to keep the handle.
11394
+ * @description Client-assigned correlation handle, echoed back on order reads (detail and list) and on order WebSocket events. At most 64 characters from [A-Za-z0-9._:-]; surrounding whitespace is trimmed before storage, and a blank or whitespace-only value is treated as absent. Uniqueness is enforced only among your orders that are RESTING on the book: a create or replace reusing a value another of your resting orders still holds is rejected with HTTP 409 / gRPC ALREADY_EXISTS and the code CLIENT_ORDER_ID_CONFLICT. An order that never rests — MARKET, IOC/FOK, or a LIMIT that fills completely on arrival — does not take the handle, and the value is released the moment any order reaches a terminal state. It is therefore NOT an idempotency key, though on this replace path a retry cannot double-execute: the request names the original order id, and the sequencer revalidates that original in memory and on the book at sequence time, so once the first replacement succeeds the original is gone and a retry is rejected with ORDER_NOT_FOUND rather than placing a second order. That code is itself ambiguous — the original may instead have filled or been cancelled — so the risk here is acting on a stale view, not duplicate execution. Reconcile a lost response against the order WebSocket stream, which carries this value on the submit acknowledgement and on fills, including for orders that never rest; order history is replica-backed and can omit an order that did land. The stream is not replayable and has no sequence number to backfill from, and events are not persisted for redelivery, so one can be missed while your connection still looks healthy. A matching event is therefore positive proof the order was accepted, but silence is NEVER evidence it was not, and no client-observable condition makes it so. Absent positive evidence the outcome is unresolved: hold and escalate rather than resubmitting. A replacement carries no order type or time-in-force and its original must still be RESTING, so the post-acceptance rejection shapes are unreachable here: the reachable failures are all pre-acceptance — malformed, post-only would cross, handle conflict, or the original no longer resting (ORDER_NOT_FOUND) — and each fails the request, emits no event and is never written to order history (an order rejected AFTER acceptance is persisted with status REJECTED, so only the pre-acceptance class is absent). Where no surface is conclusive, do not resubmit. A replacement is a new order with a new id, so it carries its own value and inherits nothing from the original — restate it to keep the handle.
10398
11395
  * @example quote-btc-1130-a
10399
11396
  */
10400
11397
  clientOrderId?: string | null;
@@ -10532,7 +11529,12 @@ export interface components {
10532
11529
  executionId?: string | null;
10533
11530
  price?: string | null;
10534
11531
  quantity?: string | null;
11532
+ /** @description The taker's whole fee on this fill: monacoFee plus builderFee */
10535
11533
  fee?: string | null;
11534
+ /** @description The Monaco part of fee */
11535
+ monacoFee?: string | null;
11536
+ /** @description The builder part of fee */
11537
+ builderFee?: string | null;
10536
11538
  };
10537
11539
  /** @description A selected maker's own part of an acceptance, for answering last look. */
10538
11540
  RfqMakerSelection: {
@@ -10548,6 +11550,18 @@ export interface components {
10548
11550
  frozenTerms?: components["schemas"]["RfqQuoteTerms"];
10549
11551
  /** Format: int64 */
10550
11552
  lastLookDeadlineAtMs?: number | null;
11553
+ /**
11554
+ * Format: int32
11555
+ * @description Your Monaco maker fee rate in centi-bps, frozen at acceptance; negative for a rebate
11556
+ */
11557
+ monacoFeeCbps?: number | null;
11558
+ /**
11559
+ * Format: int32
11560
+ * @description The MOST your frontend's builder add-on charges on this fill, in centi-bps: the rate stored on your quote order. A fill charges this rate or nothing, never more; the receipt shows what was charged. An IMPROVE re-places the quote at the rate configured then. Absent when it could not be read
11561
+ */
11562
+ maxBuilderFeeCbps?: number | null;
11563
+ /** @description Estimated net at the selected quantity and frozen price, in the quote asset, at monacoFeeCbps plus the maximum builder add-on: the least you receive when selling, the most you pay when buying. Absent with maxBuilderFeeCbps */
11564
+ estimatedNet?: string | null;
10551
11565
  };
10552
11566
  /** @description A market RFQ is offered on. */
10553
11567
  RfqMarketCapability: {
@@ -10651,6 +11665,14 @@ export interface components {
10651
11665
  vwap?: string | null;
10652
11666
  /** @description Quantity the allocation fills */
10653
11667
  availableQuantity?: string | null;
11668
+ /** @description VWAP before fees */
11669
+ grossVwap?: string | null;
11670
+ /** @description Estimated Monaco taker fee on available_quantity, in the quote asset */
11671
+ estimatedMonacoFee?: string | null;
11672
+ /** @description Estimated builder fee on available_quantity, in the quote asset */
11673
+ estimatedBuilderFee?: string | null;
11674
+ /** @description Estimated total taker fee on available_quantity, in the quote asset */
11675
+ estimatedTotalFee?: string | null;
10654
11676
  };
10655
11677
  /** @description Authoritative RFQ status. */
10656
11678
  RfqStatus: {
@@ -10690,6 +11712,16 @@ export interface components {
10690
11712
  * @description View time, Unix milliseconds
10691
11713
  */
10692
11714
  asOfMs?: number | null;
11715
+ /**
11716
+ * Format: int32
11717
+ * @description The taker's Monaco fee rate in this view, in centi-bps
11718
+ */
11719
+ monacoFeeCbps?: number | null;
11720
+ /**
11721
+ * Format: int32
11722
+ * @description The taker's builder fee rate in this view, in centi-bps
11723
+ */
11724
+ builderFeeCbps?: number | null;
10693
11725
  };
10694
11726
  /**
10695
11727
  * @description One notional bracket of a market's margin ladder. Brackets are MARGINAL:
@@ -11124,7 +12156,10 @@ export interface components {
11124
12156
  * useful for auto-resolved buckets where the caller didn't supply the id.
11125
12157
  */
11126
12158
  marginAccountId?: string | null;
11127
- /** @description Populated when the simulated account is an auto-resolved bucket. */
12159
+ /**
12160
+ * @description The request's strategyKey (the sub-account key) on an isolated risk-bucket
12161
+ * preview, `default` when it sent none.
12162
+ */
11128
12163
  strategyKey?: string | null;
11129
12164
  /** @description Present when the simulation resolved against a risk bucket. */
11130
12165
  riskBucketId?: string | null;
@@ -11225,6 +12260,12 @@ export interface components {
11225
12260
  SimulateRiskBucketOrderRiskRequest: {
11226
12261
  /** Format: uuid */
11227
12262
  tradingPairId?: string | null;
12263
+ /**
12264
+ * @description Sub-account key of the margin account whose risk bucket this names, like
12265
+ * marginAccountId (`default` is the default margin account). Refused when it is
12266
+ * not a valid sub-account key, names none of the caller's open sub-accounts, or
12267
+ * disagrees with marginAccountId.
12268
+ */
11228
12269
  strategyKey?: string | null;
11229
12270
  side?: string | null;
11230
12271
  /** @description Deprecated compatibility value; `side` is authoritative. */
@@ -11470,6 +12511,84 @@ export interface components {
11470
12511
  /** @description When the sweeper last observed progress on the deposit */
11471
12512
  updatedAt?: string | null;
11472
12513
  };
12514
+ /** @description What the vault holds of one token. Amounts are raw token units. Withdrawals count when initiated; the vault's physical balance is custodyRaw plus pendingWithdrawalsRaw. Custody is folded from the trade and transfer stream into the aux database while pendingWithdrawalsRaw is read from core, so the two can disagree briefly while the fold lags. */
12515
+ TokenCustody: {
12516
+ /**
12517
+ * Format: uuid
12518
+ * @description Asset UUID; null for a token with custody flow but no listed asset
12519
+ */
12520
+ assetId?: string | null;
12521
+ /**
12522
+ * @description Asset symbol; null when unlisted
12523
+ * @example USDC
12524
+ */
12525
+ symbol?: string | null;
12526
+ /**
12527
+ * @description Asset name; null when unlisted
12528
+ * @example USD Coin
12529
+ */
12530
+ name?: string | null;
12531
+ /**
12532
+ * Format: uint32
12533
+ * @description Token decimals; null when unlisted
12534
+ * @example 6
12535
+ */
12536
+ decimals?: number | null;
12537
+ /** @description Asset icon URL; null when unlisted */
12538
+ iconUrl?: string | null;
12539
+ /**
12540
+ * @description Token contract address, lowercase
12541
+ * @example 0x23e459c24c4925ba89205c400dceca7abc11723d
12542
+ */
12543
+ contractAddress?: string | null;
12544
+ /**
12545
+ * @description All-time deposits in raw token units
12546
+ * @example 536172601000000
12547
+ */
12548
+ depositedRaw?: string | null;
12549
+ /**
12550
+ * @description All-time initiated withdrawals in raw token units
12551
+ * @example 1000000
12552
+ */
12553
+ withdrawnRaw?: string | null;
12554
+ /**
12555
+ * Format: int64
12556
+ * @description Deposits of the token
12557
+ * @example 1200
12558
+ */
12559
+ depositsCount?: number | null;
12560
+ /**
12561
+ * Format: int64
12562
+ * @description Initiated withdrawals of the token
12563
+ * @example 310
12564
+ */
12565
+ withdrawalsCount?: number | null;
12566
+ /**
12567
+ * @description Deposits less initiated withdrawals in raw token units; null when not positive (never zero: a token held in no amount and one not indexed are different facts)
12568
+ * @example 536172600000000
12569
+ */
12570
+ custodyRaw?: string | null;
12571
+ /**
12572
+ * @description Withdrawals initiated but not yet executed on-chain, in raw token units; still physically in the vault
12573
+ * @example 250000000
12574
+ */
12575
+ pendingWithdrawalsRaw?: string | null;
12576
+ /**
12577
+ * @description USD price the custody is valued at: 1 for USDC, null for every other token
12578
+ * @example 1
12579
+ */
12580
+ referencePriceUsd?: string | null;
12581
+ /**
12582
+ * @description custodyRaw in USD at referencePriceUsd; null without a price or a positive custody
12583
+ * @example 536172600
12584
+ */
12585
+ custodyUsd?: string | null;
12586
+ /**
12587
+ * @description Whether custodyUsd is summed into tvlUsd (USDC only)
12588
+ * @example true
12589
+ */
12590
+ countsTowardTvl?: boolean | null;
12591
+ };
11473
12592
  TpSlLeg: {
11474
12593
  triggerPrice?: string | null;
11475
12594
  orderType?: string | null;
@@ -11562,6 +12681,11 @@ export interface components {
11562
12681
  * @example 789e0123-e45b-12d3-a456-426614174000
11563
12682
  */
11564
12683
  takerApplicationId?: string | null;
12684
+ /**
12685
+ * @description The taker's builder fee: the add-on the taker's application (frontend) charged on the trade, in raw quote-asset units (the asset's smallest unit), on top of takerFeeRaw. "0" when it charged none.
12686
+ * @example 4375
12687
+ */
12688
+ builderFeeRaw?: string | null;
11565
12689
  };
11566
12690
  TradeFlowBucket: {
11567
12691
  /**
@@ -11652,13 +12776,6 @@ export interface components {
11652
12776
  * @example true
11653
12777
  */
11654
12778
  isActive?: boolean | null;
11655
- /**
11656
- * Format: int32
11657
- * @deprecated
11658
- * @description DEPRECATED: legacy flat maker fee in bps (negative = rebate). This is the pre-tiered pair-level rate and does NOT reflect the tiered fee actually charged, which is per-user and fractional. Do not display this as the user's fee — call GET /api/v1/fees/tier for the caller's real rate. Will be removed in a later release.
11659
- * @example -2
11660
- */
11661
- makerFeeBps?: number | null;
11662
12779
  /**
11663
12780
  * @description Market type: SPOT or MARGIN
11664
12781
  * @example SPOT
@@ -11706,13 +12823,6 @@ export interface components {
11706
12823
  * @example BTC/USDC
11707
12824
  */
11708
12825
  symbol?: string | null;
11709
- /**
11710
- * Format: int32
11711
- * @deprecated
11712
- * @description DEPRECATED: legacy flat taker fee in bps. This is the pre-tiered pair-level rate and does NOT reflect the tiered fee actually charged, which is per-user and fractional. Do not display this as the user's fee — call GET /api/v1/fees/tier for the caller's real rate. Will be removed in a later release.
11713
- * @example 10
11714
- */
11715
- takerFeeBps?: number | null;
11716
12826
  /**
11717
12827
  * @description Minimum price increment
11718
12828
  * @example 0.01
@@ -11801,7 +12911,10 @@ export interface components {
11801
12911
  * the parent margin account only.
11802
12912
  */
11803
12913
  tradingPairId?: string | null;
11804
- /** @description Optional strategy key echoed in responses when callers scope a risk bucket. */
12914
+ /**
12915
+ * @description Sub-account key of the margin account in the path, if sent: refused when it
12916
+ * names another account. Echoed on the response.
12917
+ */
11805
12918
  strategyKey?: string | null;
11806
12919
  /**
11807
12920
  * @description Risk bucket mode. Defaults to ISOLATED, which is selected by tradingPairId.
@@ -11827,6 +12940,7 @@ export interface components {
11827
12940
  * zero at the collateral asset's precision.
11828
12941
  */
11829
12942
  newWithdrawableCollateral?: string | null;
12943
+ /** @description The request's strategyKey (the sub-account key), echoed. */
11830
12944
  strategyKey?: string | null;
11831
12945
  };
11832
12946
  TransferCollateralFromParentMarginAccountRequest: {
@@ -11875,7 +12989,10 @@ export interface components {
11875
12989
  * the parent margin account only.
11876
12990
  */
11877
12991
  tradingPairId?: string | null;
11878
- /** @description Optional strategy key echoed in responses when callers scope a risk bucket. */
12992
+ /**
12993
+ * @description Sub-account key of the margin account in the path, if sent: refused when it
12994
+ * names another account. Echoed on the response.
12995
+ */
11879
12996
  strategyKey?: string | null;
11880
12997
  /** @description Optional submission identity, shared with order create (same 1-64 characters from [A-Za-z0-9._:-], same per user and application namespace). Retrying the same key and request within 15 minutes of the original acceptance returns the original transfer result, including its movementId, without moving money again; balance figures in a replayed response are as of the retry. The same key with a different request, or a key already used on another endpoint, returns IDEMPOTENCY_KEY_CONFLICT (HTTP 409 / gRPC ALREADY_EXISTS). ORDER_SUBMISSION_UNAVAILABLE and ORDER_SUBMISSION_CAPACITY_EXCEEDED (HTTP 503 / gRPC UNAVAILABLE) mean the outcome is held but cannot be read, or no new key can be accepted: retry with the same key and request. The window does not extend on retries; after it the key moves money again. Generate a fresh key for each intended transfer and keep it across retries of that transfer. */
11881
12998
  idempotencyKey?: string | null;
@@ -11895,6 +13012,10 @@ export interface components {
11895
13012
  * zero at the collateral asset's precision.
11896
13013
  */
11897
13014
  newWithdrawableCollateral?: string | null;
13015
+ /**
13016
+ * @description The request's strategyKey (the sub-account key), echoed; a risk-bucket
13017
+ * transfer-in that sent none reports `default`.
13018
+ */
11898
13019
  strategyKey?: string | null;
11899
13020
  /** @description Present when collateral was allocated to a risk bucket. */
11900
13021
  riskBucketId?: string | null;
@@ -11932,6 +13053,12 @@ export interface components {
11932
13053
  * Required for isolated risk buckets; omitted for cross risk buckets.
11933
13054
  */
11934
13055
  tradingPairId?: string | null;
13056
+ /**
13057
+ * @description Sub-account key of the margin account whose risk bucket this names, like
13058
+ * marginAccountId (`default` is the default margin account). Refused when it is
13059
+ * not a valid sub-account key, names none of the caller's open sub-accounts, or
13060
+ * disagrees with marginAccountId.
13061
+ */
11935
13062
  strategyKey?: string | null;
11936
13063
  /**
11937
13064
  * @description Risk bucket mode. Defaults to ISOLATED. Values: ISOLATED, CROSS. A CROSS
@@ -12139,7 +13266,7 @@ export interface components {
12139
13266
  * @example false
12140
13267
  */
12141
13268
  useMasterBalance?: boolean | null;
12142
- /** @description Strategy key used to group risk buckets */
13269
+ /** @description The strategyKey the parent was created with (the sub-account key) */
12143
13270
  strategyKey?: string | null;
12144
13271
  /** @description Client-assigned idempotency key */
12145
13272
  clientTwapId?: string | null;
@@ -12577,8 +13704,130 @@ export interface components {
12577
13704
  * @example TAKER
12578
13705
  */
12579
13706
  liquidityRole?: string | null;
12580
- };
12581
- VerifyRequest: {
13707
+ /**
13708
+ * Format: uuid
13709
+ * @description The RFQ (block trade) this user's own order filled in; absent on an order-book fill. Read the RFQ with GetRfq.
13710
+ */
13711
+ rfqId?: string | null;
13712
+ /**
13713
+ * Format: uuid
13714
+ * @description Set on a maker's RFQ fill only: the internal engine id of the quote version the maker's order rested for. It is not the public quoteId.
13715
+ */
13716
+ rfqQuoteId?: string | null;
13717
+ };
13718
+ /** @description One deposit into the vault */
13719
+ VaultDeposit: {
13720
+ /**
13721
+ * Format: int64
13722
+ * @description The deposit's on-chain index; the feed's order
13723
+ * @example 1042
13724
+ */
13725
+ onChainIndex?: number | null;
13726
+ /**
13727
+ * @description Deposit transaction hash
13728
+ * @example 0x5f2c...
13729
+ */
13730
+ txHash?: string | null;
13731
+ /**
13732
+ * Format: int64
13733
+ * @description Block the deposit landed in
13734
+ * @example 18273645
13735
+ */
13736
+ blockNumber?: number | null;
13737
+ /**
13738
+ * @description Token contract address, lowercase
13739
+ * @example 0x23e459c24c4925ba89205c400dceca7abc11723d
13740
+ */
13741
+ token?: string | null;
13742
+ /**
13743
+ * Format: uuid
13744
+ * @description Asset UUID, when the token is listed
13745
+ */
13746
+ assetId?: string | null;
13747
+ /**
13748
+ * @description Asset symbol, when the token is listed
13749
+ * @example USDC
13750
+ */
13751
+ symbol?: string | null;
13752
+ /**
13753
+ * @description Amount in raw token units
13754
+ * @example 5000000
13755
+ */
13756
+ amountRaw?: string | null;
13757
+ /**
13758
+ * @description Account credited, lowercase
13759
+ * @example 0x1234567890abcdef1234567890abcdef12345678
13760
+ */
13761
+ destination?: string | null;
13762
+ /**
13763
+ * @description Account type credited
13764
+ * @example SPOT
13765
+ */
13766
+ targetAccountType?: string | null;
13767
+ /**
13768
+ * Format: int64
13769
+ * @description When the deposit was processed, as Unix milliseconds
13770
+ * @example 1762041600000
13771
+ */
13772
+ depositedAt?: number | null;
13773
+ /**
13774
+ * @description The displayed builder the deposit came through; null when the builder is
13775
+ * hidden or the deposit names none. applications is empty.
13776
+ */
13777
+ builder?: components["schemas"]["Builder"] | null;
13778
+ };
13779
+ /** @description One withdrawal from the vault, from initiation on */
13780
+ VaultWithdrawal: {
13781
+ /**
13782
+ * Format: int64
13783
+ * @description Withdrawal index, allocated in request order; the feed's order
13784
+ * @example 42
13785
+ */
13786
+ withdrawalIndex?: number | null;
13787
+ /**
13788
+ * @description Token contract address, lowercase
13789
+ * @example 0x23e459c24c4925ba89205c400dceca7abc11723d
13790
+ */
13791
+ token?: string | null;
13792
+ /**
13793
+ * Format: uuid
13794
+ * @description Asset UUID, when the token is listed
13795
+ */
13796
+ assetId?: string | null;
13797
+ /**
13798
+ * @description Asset symbol, when the token is listed
13799
+ * @example USDC
13800
+ */
13801
+ symbol?: string | null;
13802
+ /**
13803
+ * @description Amount in raw token units
13804
+ * @example 5000000
13805
+ */
13806
+ amountRaw?: string | null;
13807
+ /**
13808
+ * @description Address the tokens are paid out to
13809
+ * @example 0x1234567890abcdef1234567890abcdef12345678
13810
+ */
13811
+ destination?: string | null;
13812
+ /**
13813
+ * @description pending: initiated. confirmed: its proof is ready to execute. executed: paid out on-chain.
13814
+ * @example executed
13815
+ * @enum {string|null}
13816
+ */
13817
+ status?: "pending" | "confirmed" | "executed" | null;
13818
+ /**
13819
+ * Format: int64
13820
+ * @description When the withdrawal was initiated, as Unix milliseconds
13821
+ * @example 1762041600000
13822
+ */
13823
+ initiatedAt?: number | null;
13824
+ /**
13825
+ * @description The displayed builder the withdrawal came through; null when the builder
13826
+ * is hidden. applications is empty.
13827
+ */
13828
+ builder?: components["schemas"]["Builder"] | null;
13829
+ };
13830
+ VerifyRequest: {
12582
13831
  /**
12583
13832
  * @description Ethereum wallet address
12584
13833
  * @example 0x742d35Cc6634C0532925a3b8D4060f31E2C3d8B5
@@ -12600,7 +13849,7 @@ export interface components {
12600
13849
  */
12601
13850
  clientId?: string | null;
12602
13851
  /**
12603
- * @description Optional chain ID supplied by SDK clients
13852
+ * @description Optional EVM chain ID supplied by SDK clients, as a JSON number or a decimal string (for example 1329 or "1329")
12604
13853
  * @example 1328
12605
13854
  */
12606
13855
  chainId?: string | null;
@@ -12647,6 +13896,65 @@ export interface components {
12647
13896
  */
12648
13897
  referralNotAppliedReason?: "REFERRAL_NOT_APPLIED_REASON_UNSPECIFIED" | "REFERRAL_NOT_APPLIED_REASON_ALREADY_REFERRED" | "REFERRAL_NOT_APPLIED_REASON_UNKNOWN_CODE" | "REFERRAL_NOT_APPLIED_REASON_SELF_REFERRAL" | null;
12649
13898
  };
13899
+ /** @description A wallet's figures through one displayed builder. A display group's applications fold into one row under the group. */
13900
+ WalletBuilderVolume: {
13901
+ /** @description The builder the figures are reported under; applications is empty. */
13902
+ builder?: components["schemas"]["Builder"] | null;
13903
+ /**
13904
+ * @description All-time taker volume in USD through this builder
13905
+ * @example 52000
13906
+ */
13907
+ volumeUsd?: string | null;
13908
+ /**
13909
+ * Format: int64
13910
+ * @description Trades through this builder
13911
+ * @example 180
13912
+ */
13913
+ tradesCount?: number | null;
13914
+ /**
13915
+ * Format: int64
13916
+ * @description First taker trade through this builder as Unix milliseconds
13917
+ * @example 1758000000000
13918
+ */
13919
+ firstTradedAt?: number | null;
13920
+ /**
13921
+ * Format: int64
13922
+ * @description Latest taker trade through this builder as Unix milliseconds
13923
+ * @example 1762041600000
13924
+ */
13925
+ lastTradedAt?: number | null;
13926
+ };
13927
+ /** @description One wallet's all-time taker figures, every builder included */
13928
+ WalletVolume: {
13929
+ /**
13930
+ * @description Wallet address, lowercase
13931
+ * @example 0x1234567890abcdef1234567890abcdef12345678
13932
+ */
13933
+ wallet?: string | null;
13934
+ /**
13935
+ * @description All-time taker volume in USD (USDC 1:1)
13936
+ * @example 125000.5
13937
+ */
13938
+ volumeUsd?: string | null;
13939
+ /**
13940
+ * Format: int64
13941
+ * @description Trades the wallet took
13942
+ * @example 412
13943
+ */
13944
+ tradesCount?: number | null;
13945
+ /**
13946
+ * Format: int64
13947
+ * @description The wallet's first taker trade as Unix milliseconds
13948
+ * @example 1758000000000
13949
+ */
13950
+ firstTradedAt?: number | null;
13951
+ /**
13952
+ * Format: int64
13953
+ * @description The wallet's latest taker trade as Unix milliseconds
13954
+ * @example 1762041600000
13955
+ */
13956
+ lastTradedAt?: number | null;
13957
+ };
12650
13958
  WithdrawRfqQuoteRequest: {
12651
13959
  /**
12652
13960
  * Format: int64
@@ -12678,6 +13986,20 @@ export interface components {
12678
13986
  /** @description 0x-prefixed ABI-encoded executeWithdrawal(...) calldata; submit as tx.data to the vault. Empty on InitiateWithdrawal (the merkle proof is not available until the withdrawal root is confirmed on-chain) — fetch it from GetWithdrawal once ready */
12679
13987
  calldata?: string | null;
12680
13988
  };
13989
+ /** @description What the wallet traded through builders the explorer does not display, so the builder rows and the wallet total reconcile */
13990
+ WithheldVolume: {
13991
+ /**
13992
+ * @description Taker volume in USD through hidden builders
13993
+ * @example 1500
13994
+ */
13995
+ volumeUsd?: string | null;
13996
+ /**
13997
+ * Format: int64
13998
+ * @description Trades through hidden builders
13999
+ * @example 12
14000
+ */
14001
+ tradesCount?: number | null;
14002
+ };
12681
14003
  };
12682
14004
  responses: never;
12683
14005
  parameters: never;
@@ -13460,18 +14782,811 @@ export interface operations {
13460
14782
  };
13461
14783
  };
13462
14784
  };
13463
- set_self_trade_prevention_default: {
14785
+ set_self_trade_prevention_default: {
14786
+ parameters: {
14787
+ query?: never;
14788
+ header?: never;
14789
+ path?: never;
14790
+ cookie?: never;
14791
+ };
14792
+ requestBody: {
14793
+ content: {
14794
+ "application/json": components["schemas"]["SetSelfTradePreventionDefaultRequest"];
14795
+ };
14796
+ };
14797
+ responses: {
14798
+ /** @description OK */
14799
+ 200: {
14800
+ headers: {
14801
+ [name: string]: unknown;
14802
+ };
14803
+ content: {
14804
+ "application/json": components["schemas"]["SelfTradePreventionDefaultResponse"];
14805
+ };
14806
+ };
14807
+ /** @description Unknown mode */
14808
+ 400: {
14809
+ headers: {
14810
+ [name: string]: unknown;
14811
+ };
14812
+ content?: never;
14813
+ };
14814
+ /** @description Authentication required */
14815
+ 401: {
14816
+ headers: {
14817
+ [name: string]: unknown;
14818
+ };
14819
+ content?: never;
14820
+ };
14821
+ /** @description Delegated-agent sessions cannot change account settings */
14822
+ 403: {
14823
+ headers: {
14824
+ [name: string]: unknown;
14825
+ };
14826
+ content?: never;
14827
+ };
14828
+ /** @description Settings write rate limit exceeded — the lead trader profile, follow create/edit and self-trade-prevention default share a per-account budget (and the budget the account family shares); retry after the interval in details.retryAfter */
14829
+ 429: {
14830
+ headers: {
14831
+ [name: string]: unknown;
14832
+ };
14833
+ content?: never;
14834
+ };
14835
+ /** @description Internal server error */
14836
+ 500: {
14837
+ headers: {
14838
+ [name: string]: unknown;
14839
+ };
14840
+ content?: never;
14841
+ };
14842
+ };
14843
+ };
14844
+ list_sub_accounts_with_balances: {
14845
+ parameters: {
14846
+ query?: never;
14847
+ header?: never;
14848
+ path?: never;
14849
+ cookie?: never;
14850
+ };
14851
+ requestBody?: never;
14852
+ responses: {
14853
+ /** @description OK */
14854
+ 200: {
14855
+ headers: {
14856
+ [name: string]: unknown;
14857
+ };
14858
+ content: {
14859
+ "application/json": components["schemas"]["ListSubAccountsResponse"];
14860
+ };
14861
+ };
14862
+ /** @description Invalid request */
14863
+ 400: {
14864
+ headers: {
14865
+ [name: string]: unknown;
14866
+ };
14867
+ content?: never;
14868
+ };
14869
+ /** @description Authentication required */
14870
+ 401: {
14871
+ headers: {
14872
+ [name: string]: unknown;
14873
+ };
14874
+ content?: never;
14875
+ };
14876
+ /** @description Only master accounts can view sub-accounts */
14877
+ 403: {
14878
+ headers: {
14879
+ [name: string]: unknown;
14880
+ };
14881
+ content?: never;
14882
+ };
14883
+ /** @description Read rate limit exceeded — every authenticated read draws one request from the account's read budget; retry after the interval in details.retryAfter */
14884
+ 429: {
14885
+ headers: {
14886
+ [name: string]: unknown;
14887
+ };
14888
+ content?: never;
14889
+ };
14890
+ /** @description Internal server error */
14891
+ 500: {
14892
+ headers: {
14893
+ [name: string]: unknown;
14894
+ };
14895
+ content?: never;
14896
+ };
14897
+ };
14898
+ };
14899
+ create_sub_account_limit: {
14900
+ parameters: {
14901
+ query?: never;
14902
+ header?: never;
14903
+ path?: never;
14904
+ cookie?: never;
14905
+ };
14906
+ requestBody: {
14907
+ content: {
14908
+ "application/json": components["schemas"]["CreateLimitRequest"];
14909
+ };
14910
+ };
14911
+ responses: {
14912
+ /** @description OK */
14913
+ 200: {
14914
+ headers: {
14915
+ [name: string]: unknown;
14916
+ };
14917
+ content: {
14918
+ "application/json": components["schemas"]["CreateLimitResponse"];
14919
+ };
14920
+ };
14921
+ /** @description Limit created successfully */
14922
+ 201: {
14923
+ headers: {
14924
+ [name: string]: unknown;
14925
+ };
14926
+ content: {
14927
+ "application/json": components["schemas"]["CreateLimitResponse"];
14928
+ };
14929
+ };
14930
+ /** @description Invalid request or limit already exists */
14931
+ 400: {
14932
+ headers: {
14933
+ [name: string]: unknown;
14934
+ };
14935
+ content?: never;
14936
+ };
14937
+ /** @description Authentication required */
14938
+ 401: {
14939
+ headers: {
14940
+ [name: string]: unknown;
14941
+ };
14942
+ content?: never;
14943
+ };
14944
+ /** @description Only master accounts can set sub-account limits */
14945
+ 403: {
14946
+ headers: {
14947
+ [name: string]: unknown;
14948
+ };
14949
+ content?: never;
14950
+ };
14951
+ /** @description Sub-account relationship not found or asset not found */
14952
+ 404: {
14953
+ headers: {
14954
+ [name: string]: unknown;
14955
+ };
14956
+ content?: never;
14957
+ };
14958
+ /** @description Internal server error */
14959
+ 500: {
14960
+ headers: {
14961
+ [name: string]: unknown;
14962
+ };
14963
+ content?: never;
14964
+ };
14965
+ };
14966
+ };
14967
+ get_sub_account_limits: {
14968
+ parameters: {
14969
+ query?: never;
14970
+ header?: never;
14971
+ path: {
14972
+ /** @example 2b1a5f9c-0000-4000-8000-000000000005 */
14973
+ subAccountId: string;
14974
+ };
14975
+ cookie?: never;
14976
+ };
14977
+ requestBody?: never;
14978
+ responses: {
14979
+ /** @description OK */
14980
+ 200: {
14981
+ headers: {
14982
+ [name: string]: unknown;
14983
+ };
14984
+ content: {
14985
+ "application/json": components["schemas"]["GetLimitsResponse"];
14986
+ };
14987
+ };
14988
+ /** @description Invalid request */
14989
+ 400: {
14990
+ headers: {
14991
+ [name: string]: unknown;
14992
+ };
14993
+ content?: never;
14994
+ };
14995
+ /** @description Authentication required */
14996
+ 401: {
14997
+ headers: {
14998
+ [name: string]: unknown;
14999
+ };
15000
+ content?: never;
15001
+ };
15002
+ /** @description Sub-account not found */
15003
+ 404: {
15004
+ headers: {
15005
+ [name: string]: unknown;
15006
+ };
15007
+ content?: never;
15008
+ };
15009
+ /** @description Read rate limit exceeded — every authenticated read draws one request from the account's read budget; retry after the interval in details.retryAfter */
15010
+ 429: {
15011
+ headers: {
15012
+ [name: string]: unknown;
15013
+ };
15014
+ content?: never;
15015
+ };
15016
+ /** @description Internal server error */
15017
+ 500: {
15018
+ headers: {
15019
+ [name: string]: unknown;
15020
+ };
15021
+ content?: never;
15022
+ };
15023
+ };
15024
+ };
15025
+ update_sub_account_limit: {
15026
+ parameters: {
15027
+ query?: never;
15028
+ header?: never;
15029
+ path: {
15030
+ /** @example 2b1a5f9c-0000-4000-8000-000000000005 */
15031
+ subAccountId: string;
15032
+ /** @example 1905d968-cc65-4cc7-b77c-1905d968cc65 */
15033
+ assetId: string;
15034
+ };
15035
+ cookie?: never;
15036
+ };
15037
+ requestBody: {
15038
+ content: {
15039
+ "application/json": components["schemas"]["UpdateLimitRequest"];
15040
+ };
15041
+ };
15042
+ responses: {
15043
+ /** @description OK */
15044
+ 200: {
15045
+ headers: {
15046
+ [name: string]: unknown;
15047
+ };
15048
+ content: {
15049
+ "application/json": components["schemas"]["UpdateLimitResponse"];
15050
+ };
15051
+ };
15052
+ /** @description Invalid request */
15053
+ 400: {
15054
+ headers: {
15055
+ [name: string]: unknown;
15056
+ };
15057
+ content?: never;
15058
+ };
15059
+ /** @description Authentication required */
15060
+ 401: {
15061
+ headers: {
15062
+ [name: string]: unknown;
15063
+ };
15064
+ content?: never;
15065
+ };
15066
+ /** @description Only master accounts can update sub-account limits */
15067
+ 403: {
15068
+ headers: {
15069
+ [name: string]: unknown;
15070
+ };
15071
+ content?: never;
15072
+ };
15073
+ /** @description Limit not found */
15074
+ 404: {
15075
+ headers: {
15076
+ [name: string]: unknown;
15077
+ };
15078
+ content?: never;
15079
+ };
15080
+ /** @description Internal server error */
15081
+ 500: {
15082
+ headers: {
15083
+ [name: string]: unknown;
15084
+ };
15085
+ content?: never;
15086
+ };
15087
+ };
15088
+ };
15089
+ delete_sub_account_limit: {
15090
+ parameters: {
15091
+ query?: {
15092
+ /** @description Limit identifier (UUID) */
15093
+ limitId?: string;
15094
+ };
15095
+ header?: never;
15096
+ path: {
15097
+ /** @example 2b1a5f9c-0000-4000-8000-000000000005 */
15098
+ subAccountId: string;
15099
+ /** @example 1905d968-cc65-4cc7-b77c-1905d968cc65 */
15100
+ assetId: string;
15101
+ };
15102
+ cookie?: never;
15103
+ };
15104
+ requestBody?: never;
15105
+ responses: {
15106
+ /** @description OK */
15107
+ 200: {
15108
+ headers: {
15109
+ [name: string]: unknown;
15110
+ };
15111
+ content: {
15112
+ "application/json": components["schemas"]["DeleteLimitResponse"];
15113
+ };
15114
+ };
15115
+ /** @description Invalid request */
15116
+ 400: {
15117
+ headers: {
15118
+ [name: string]: unknown;
15119
+ };
15120
+ content?: never;
15121
+ };
15122
+ /** @description Authentication required */
15123
+ 401: {
15124
+ headers: {
15125
+ [name: string]: unknown;
15126
+ };
15127
+ content?: never;
15128
+ };
15129
+ /** @description Only master accounts can delete sub-account limits */
15130
+ 403: {
15131
+ headers: {
15132
+ [name: string]: unknown;
15133
+ };
15134
+ content?: never;
15135
+ };
15136
+ /** @description Limit not found */
15137
+ 404: {
15138
+ headers: {
15139
+ [name: string]: unknown;
15140
+ };
15141
+ content?: never;
15142
+ };
15143
+ /** @description Internal server error */
15144
+ 500: {
15145
+ headers: {
15146
+ [name: string]: unknown;
15147
+ };
15148
+ content?: never;
15149
+ };
15150
+ };
15151
+ };
15152
+ get_user_trades: {
15153
+ parameters: {
15154
+ query?: {
15155
+ /** @description Items per page (max: 100 in page-number mode; up to 1000 when pageToken is present) */
15156
+ pageSize?: number;
15157
+ /** @description Trading pair identifier (UUID) */
15158
+ tradingPairId?: string;
15159
+ /**
15160
+ * @description Pagination cursor with two states:
15161
+ * - Omitted or empty string (""): start a cursor walk with no prior
15162
+ * position, from the newest row.
15163
+ * - Non-empty: an opaque cursor from a previous response's
15164
+ * `nextPageToken`; results resume immediately after that position.
15165
+ *
15166
+ * Every walk covers full trade history — hot and archived rows merged. An
15167
+ * unfiltered response carries a bounded item count (`total`); a response
15168
+ * filtered by `trading_pair_id` carries none. Filters must match the request
15169
+ * that produced the token.
15170
+ */
15171
+ pageToken?: string;
15172
+ /**
15173
+ * @description Optional margin account UUID filter: only trades where this user's side of
15174
+ * the fill was placed from this margin account. A self-trade is read as its
15175
+ * maker side, so it matches through its maker order's account. Like
15176
+ * `trading_pair_id`, a filtered response carries no `total`, and the filter
15177
+ * must match the request that produced a `page_token`.
15178
+ */
15179
+ marginAccountId?: string;
15180
+ /**
15181
+ * @description Optional order UUID filter: only trades where this user's side of the
15182
+ * fill was placed by this order. A self-trade is read as its maker side, so
15183
+ * it matches its maker order only. A filtered response carries no `total`,
15184
+ * and the filter must match the request that produced a `page_token`.
15185
+ */
15186
+ orderId?: string;
15187
+ };
15188
+ header?: never;
15189
+ path?: never;
15190
+ cookie?: never;
15191
+ };
15192
+ requestBody?: never;
15193
+ responses: {
15194
+ /** @description OK */
15195
+ 200: {
15196
+ headers: {
15197
+ [name: string]: unknown;
15198
+ };
15199
+ content: {
15200
+ "application/json": components["schemas"]["GetUserTradesResponse"];
15201
+ };
15202
+ };
15203
+ /** @description Invalid request */
15204
+ 400: {
15205
+ headers: {
15206
+ [name: string]: unknown;
15207
+ };
15208
+ content?: never;
15209
+ };
15210
+ /** @description Authentication required */
15211
+ 401: {
15212
+ headers: {
15213
+ [name: string]: unknown;
15214
+ };
15215
+ content?: never;
15216
+ };
15217
+ /** @description Read rate limit exceeded — every authenticated read draws one request from the account's read budget; retry after the interval in details.retryAfter */
15218
+ 429: {
15219
+ headers: {
15220
+ [name: string]: unknown;
15221
+ };
15222
+ content?: never;
15223
+ };
15224
+ /** @description Internal server error */
15225
+ 500: {
15226
+ headers: {
15227
+ [name: string]: unknown;
15228
+ };
15229
+ content?: never;
15230
+ };
15231
+ };
15232
+ };
15233
+ list_builder_leaderboard: {
15234
+ parameters: {
15235
+ query?: {
15236
+ /** @description Window: the last 24 hours, 7 days or 30 days before endTime, all time, or custom (startTime to endTime) */
15237
+ window?: "24h" | "7d" | "30d" | "all" | "custom";
15238
+ /** @description Custom window start as Unix milliseconds. Required with window=custom and rejected otherwise. */
15239
+ startTime?: number;
15240
+ /** @description Window end as Unix milliseconds; defaults to now. Buckets starting at or before it count. A window counted in hours (2.5 days or shorter) must start within the last 90 days. */
15241
+ endTime?: number;
15242
+ /** @description Builders to return, largest volume first (max 100) */
15243
+ limit?: number;
15244
+ };
15245
+ header?: never;
15246
+ path?: never;
15247
+ cookie?: never;
15248
+ };
15249
+ requestBody?: never;
15250
+ responses: {
15251
+ /** @description OK */
15252
+ 200: {
15253
+ headers: {
15254
+ [name: string]: unknown;
15255
+ };
15256
+ content: {
15257
+ "application/json": components["schemas"]["ListBuilderLeaderboardResponse"];
15258
+ };
15259
+ };
15260
+ /** @description Invalid window or limit */
15261
+ 400: {
15262
+ headers: {
15263
+ [name: string]: unknown;
15264
+ };
15265
+ content?: never;
15266
+ };
15267
+ /** @description Public read rate limit exceeded for this client */
15268
+ 429: {
15269
+ headers: {
15270
+ [name: string]: unknown;
15271
+ };
15272
+ content?: never;
15273
+ };
15274
+ /** @description Internal server error */
15275
+ 500: {
15276
+ headers: {
15277
+ [name: string]: unknown;
15278
+ };
15279
+ content?: never;
15280
+ };
15281
+ };
15282
+ };
15283
+ list_builders: {
15284
+ parameters: {
15285
+ query?: never;
15286
+ header?: never;
15287
+ path?: never;
15288
+ cookie?: never;
15289
+ };
15290
+ requestBody?: never;
15291
+ responses: {
15292
+ /** @description OK */
15293
+ 200: {
15294
+ headers: {
15295
+ [name: string]: unknown;
15296
+ };
15297
+ content: {
15298
+ "application/json": components["schemas"]["ListBuildersResponse"];
15299
+ };
15300
+ };
15301
+ /** @description Public read rate limit exceeded for this client */
15302
+ 429: {
15303
+ headers: {
15304
+ [name: string]: unknown;
15305
+ };
15306
+ content?: never;
15307
+ };
15308
+ /** @description Internal server error */
15309
+ 500: {
15310
+ headers: {
15311
+ [name: string]: unknown;
15312
+ };
15313
+ content?: never;
15314
+ };
15315
+ };
15316
+ };
15317
+ get_builder: {
15318
+ parameters: {
15319
+ query?: never;
15320
+ header?: never;
15321
+ path: {
15322
+ /** @example 2fcec460c89c4bedb06781d4072db931 */
15323
+ builder: string;
15324
+ };
15325
+ cookie?: never;
15326
+ };
15327
+ requestBody?: never;
15328
+ responses: {
15329
+ /** @description OK */
15330
+ 200: {
15331
+ headers: {
15332
+ [name: string]: unknown;
15333
+ };
15334
+ content: {
15335
+ "application/json": components["schemas"]["GetBuilderResponse"];
15336
+ };
15337
+ };
15338
+ /** @description No displayed builder answers to this key */
15339
+ 404: {
15340
+ headers: {
15341
+ [name: string]: unknown;
15342
+ };
15343
+ content?: never;
15344
+ };
15345
+ /** @description Public read rate limit exceeded for this client */
15346
+ 429: {
15347
+ headers: {
15348
+ [name: string]: unknown;
15349
+ };
15350
+ content?: never;
15351
+ };
15352
+ /** @description Internal server error */
15353
+ 500: {
15354
+ headers: {
15355
+ [name: string]: unknown;
15356
+ };
15357
+ content?: never;
15358
+ };
15359
+ };
15360
+ };
15361
+ get_builder_series: {
15362
+ parameters: {
15363
+ query?: {
15364
+ /** @description Window: the last 24 hours, 7 days or 30 days before endTime, all time, or custom (startTime to endTime) */
15365
+ window?: "24h" | "7d" | "30d" | "all" | "custom";
15366
+ /** @description Custom window start as Unix milliseconds. Required with window=custom and rejected otherwise. */
15367
+ startTime?: number;
15368
+ /** @description Window end as Unix milliseconds; defaults to now. Buckets starting at or before it count. A window counted in hours (2.5 days or shorter) must start within the last 90 days. */
15369
+ endTime?: number;
15370
+ };
15371
+ header?: never;
15372
+ path: {
15373
+ /** @example 2fcec460c89c4bedb06781d4072db931 */
15374
+ builder: string;
15375
+ };
15376
+ cookie?: never;
15377
+ };
15378
+ requestBody?: never;
15379
+ responses: {
15380
+ /** @description OK */
15381
+ 200: {
15382
+ headers: {
15383
+ [name: string]: unknown;
15384
+ };
15385
+ content: {
15386
+ "application/json": components["schemas"]["GetBuilderSeriesResponse"];
15387
+ };
15388
+ };
15389
+ /** @description Invalid window */
15390
+ 400: {
15391
+ headers: {
15392
+ [name: string]: unknown;
15393
+ };
15394
+ content?: never;
15395
+ };
15396
+ /** @description No displayed builder answers to this key */
15397
+ 404: {
15398
+ headers: {
15399
+ [name: string]: unknown;
15400
+ };
15401
+ content?: never;
15402
+ };
15403
+ /** @description Public read rate limit exceeded for this client */
15404
+ 429: {
15405
+ headers: {
15406
+ [name: string]: unknown;
15407
+ };
15408
+ content?: never;
15409
+ };
15410
+ /** @description Internal server error */
15411
+ 500: {
15412
+ headers: {
15413
+ [name: string]: unknown;
15414
+ };
15415
+ content?: never;
15416
+ };
15417
+ };
15418
+ };
15419
+ get_builder_totals: {
15420
+ parameters: {
15421
+ query?: {
15422
+ /** @description Window: the last 24 hours, 7 days or 30 days before endTime, all time, or custom (startTime to endTime) */
15423
+ window?: "24h" | "7d" | "30d" | "all" | "custom";
15424
+ /** @description Custom window start as Unix milliseconds. Required with window=custom and rejected otherwise. */
15425
+ startTime?: number;
15426
+ /** @description Window end as Unix milliseconds; defaults to now. Buckets starting at or before it count. A window counted in hours (2.5 days or shorter) must start within the last 90 days. */
15427
+ endTime?: number;
15428
+ };
15429
+ header?: never;
15430
+ path: {
15431
+ /** @example 2fcec460c89c4bedb06781d4072db931 */
15432
+ builder: string;
15433
+ };
15434
+ cookie?: never;
15435
+ };
15436
+ requestBody?: never;
15437
+ responses: {
15438
+ /** @description OK */
15439
+ 200: {
15440
+ headers: {
15441
+ [name: string]: unknown;
15442
+ };
15443
+ content: {
15444
+ "application/json": components["schemas"]["GetBuilderTotalsResponse"];
15445
+ };
15446
+ };
15447
+ /** @description Invalid window */
15448
+ 400: {
15449
+ headers: {
15450
+ [name: string]: unknown;
15451
+ };
15452
+ content?: never;
15453
+ };
15454
+ /** @description No displayed builder answers to this key */
15455
+ 404: {
15456
+ headers: {
15457
+ [name: string]: unknown;
15458
+ };
15459
+ content?: never;
15460
+ };
15461
+ /** @description Public read rate limit exceeded for this client */
15462
+ 429: {
15463
+ headers: {
15464
+ [name: string]: unknown;
15465
+ };
15466
+ content?: never;
15467
+ };
15468
+ /** @description Internal server error */
15469
+ 500: {
15470
+ headers: {
15471
+ [name: string]: unknown;
15472
+ };
15473
+ content?: never;
15474
+ };
15475
+ };
15476
+ };
15477
+ list_vault_deposits: {
15478
+ parameters: {
15479
+ query?: {
15480
+ /** @description Deposits per page (max 1000) */
15481
+ pageSize?: number;
15482
+ /** @description Opaque keyset cursor from the previous response, bound to the filters. */
15483
+ pageToken?: string;
15484
+ token?: string;
15485
+ wallet?: string;
15486
+ };
15487
+ header?: never;
15488
+ path?: never;
15489
+ cookie?: never;
15490
+ };
15491
+ requestBody?: never;
15492
+ responses: {
15493
+ /** @description OK */
15494
+ 200: {
15495
+ headers: {
15496
+ [name: string]: unknown;
15497
+ };
15498
+ content: {
15499
+ "application/json": components["schemas"]["ListVaultDepositsResponse"];
15500
+ };
15501
+ };
15502
+ /** @description Invalid page size or page token */
15503
+ 400: {
15504
+ headers: {
15505
+ [name: string]: unknown;
15506
+ };
15507
+ content?: never;
15508
+ };
15509
+ /** @description Public read rate limit exceeded for this client */
15510
+ 429: {
15511
+ headers: {
15512
+ [name: string]: unknown;
15513
+ };
15514
+ content?: never;
15515
+ };
15516
+ /** @description Internal server error */
15517
+ 500: {
15518
+ headers: {
15519
+ [name: string]: unknown;
15520
+ };
15521
+ content?: never;
15522
+ };
15523
+ };
15524
+ };
15525
+ list_market_volumes: {
15526
+ parameters: {
15527
+ query?: {
15528
+ /** @description Window: the last 24 hours, 7 days or 30 days before endTime, all time, or custom (startTime to endTime) */
15529
+ window?: "24h" | "7d" | "30d" | "all" | "custom";
15530
+ /** @description Custom window start as Unix milliseconds. Required with window=custom and rejected otherwise. */
15531
+ startTime?: number;
15532
+ /** @description Window end as Unix milliseconds; defaults to now. Buckets starting at or before it count. A window counted in hours (2.5 days or shorter) must start within the last 90 days. */
15533
+ endTime?: number;
15534
+ /** @description Markets to return, largest volume first (max 100) */
15535
+ limit?: number;
15536
+ };
15537
+ header?: never;
15538
+ path?: never;
15539
+ cookie?: never;
15540
+ };
15541
+ requestBody?: never;
15542
+ responses: {
15543
+ /** @description OK */
15544
+ 200: {
15545
+ headers: {
15546
+ [name: string]: unknown;
15547
+ };
15548
+ content: {
15549
+ "application/json": components["schemas"]["ListMarketVolumesResponse"];
15550
+ };
15551
+ };
15552
+ /** @description Invalid window or limit */
15553
+ 400: {
15554
+ headers: {
15555
+ [name: string]: unknown;
15556
+ };
15557
+ content?: never;
15558
+ };
15559
+ /** @description Public read rate limit exceeded for this client */
15560
+ 429: {
15561
+ headers: {
15562
+ [name: string]: unknown;
15563
+ };
15564
+ content?: never;
15565
+ };
15566
+ /** @description Internal server error */
15567
+ 500: {
15568
+ headers: {
15569
+ [name: string]: unknown;
15570
+ };
15571
+ content?: never;
15572
+ };
15573
+ };
15574
+ };
15575
+ get_protocol_series: {
13464
15576
  parameters: {
13465
- query?: never;
15577
+ query?: {
15578
+ /** @description Window: the last 24 hours, 7 days or 30 days before endTime, all time, or custom (startTime to endTime) */
15579
+ window?: "24h" | "7d" | "30d" | "all" | "custom";
15580
+ /** @description Custom window start as Unix milliseconds. Required with window=custom and rejected otherwise. */
15581
+ startTime?: number;
15582
+ /** @description Window end as Unix milliseconds; defaults to now. Buckets starting at or before it count. A window counted in hours (2.5 days or shorter) must start within the last 90 days. */
15583
+ endTime?: number;
15584
+ };
13466
15585
  header?: never;
13467
15586
  path?: never;
13468
15587
  cookie?: never;
13469
15588
  };
13470
- requestBody: {
13471
- content: {
13472
- "application/json": components["schemas"]["SetSelfTradePreventionDefaultRequest"];
13473
- };
13474
- };
15589
+ requestBody?: never;
13475
15590
  responses: {
13476
15591
  /** @description OK */
13477
15592
  200: {
@@ -13479,31 +15594,17 @@ export interface operations {
13479
15594
  [name: string]: unknown;
13480
15595
  };
13481
15596
  content: {
13482
- "application/json": components["schemas"]["SelfTradePreventionDefaultResponse"];
15597
+ "application/json": components["schemas"]["GetProtocolSeriesResponse"];
13483
15598
  };
13484
15599
  };
13485
- /** @description Unknown mode */
15600
+ /** @description Invalid window */
13486
15601
  400: {
13487
15602
  headers: {
13488
15603
  [name: string]: unknown;
13489
15604
  };
13490
15605
  content?: never;
13491
15606
  };
13492
- /** @description Authentication required */
13493
- 401: {
13494
- headers: {
13495
- [name: string]: unknown;
13496
- };
13497
- content?: never;
13498
- };
13499
- /** @description Delegated-agent sessions cannot change account settings */
13500
- 403: {
13501
- headers: {
13502
- [name: string]: unknown;
13503
- };
13504
- content?: never;
13505
- };
13506
- /** @description Settings write rate limit exceeded — the lead trader profile, follow create/edit and self-trade-prevention default share a per-account budget (and the budget the account family shares); retry after the interval in details.retryAfter */
15607
+ /** @description Public read rate limit exceeded for this client */
13507
15608
  429: {
13508
15609
  headers: {
13509
15610
  [name: string]: unknown;
@@ -13519,9 +15620,16 @@ export interface operations {
13519
15620
  };
13520
15621
  };
13521
15622
  };
13522
- list_sub_accounts_with_balances: {
15623
+ get_protocol_totals: {
13523
15624
  parameters: {
13524
- query?: never;
15625
+ query?: {
15626
+ /** @description Window: the last 24 hours, 7 days or 30 days before endTime, all time, or custom (startTime to endTime) */
15627
+ window?: "24h" | "7d" | "30d" | "all" | "custom";
15628
+ /** @description Custom window start as Unix milliseconds. Required with window=custom and rejected otherwise. */
15629
+ startTime?: number;
15630
+ /** @description Window end as Unix milliseconds; defaults to now. Buckets starting at or before it count. A window counted in hours (2.5 days or shorter) must start within the last 90 days. */
15631
+ endTime?: number;
15632
+ };
13525
15633
  header?: never;
13526
15634
  path?: never;
13527
15635
  cookie?: never;
@@ -13534,31 +15642,17 @@ export interface operations {
13534
15642
  [name: string]: unknown;
13535
15643
  };
13536
15644
  content: {
13537
- "application/json": components["schemas"]["ListSubAccountsResponse"];
15645
+ "application/json": components["schemas"]["GetProtocolTotalsResponse"];
13538
15646
  };
13539
15647
  };
13540
- /** @description Invalid request */
15648
+ /** @description Invalid window */
13541
15649
  400: {
13542
15650
  headers: {
13543
15651
  [name: string]: unknown;
13544
15652
  };
13545
15653
  content?: never;
13546
15654
  };
13547
- /** @description Authentication required */
13548
- 401: {
13549
- headers: {
13550
- [name: string]: unknown;
13551
- };
13552
- content?: never;
13553
- };
13554
- /** @description Only master accounts can view sub-accounts */
13555
- 403: {
13556
- headers: {
13557
- [name: string]: unknown;
13558
- };
13559
- content?: never;
13560
- };
13561
- /** @description Read rate limit exceeded — every authenticated read draws one request from the account's read budget; retry after the interval in details.retryAfter */
15655
+ /** @description Public read rate limit exceeded for this client */
13562
15656
  429: {
13563
15657
  headers: {
13564
15658
  [name: string]: unknown;
@@ -13574,18 +15668,14 @@ export interface operations {
13574
15668
  };
13575
15669
  };
13576
15670
  };
13577
- create_sub_account_limit: {
15671
+ list_token_custody: {
13578
15672
  parameters: {
13579
15673
  query?: never;
13580
15674
  header?: never;
13581
15675
  path?: never;
13582
15676
  cookie?: never;
13583
15677
  };
13584
- requestBody: {
13585
- content: {
13586
- "application/json": components["schemas"]["CreateLimitRequest"];
13587
- };
13588
- };
15678
+ requestBody?: never;
13589
15679
  responses: {
13590
15680
  /** @description OK */
13591
15681
  200: {
@@ -13593,41 +15683,54 @@ export interface operations {
13593
15683
  [name: string]: unknown;
13594
15684
  };
13595
15685
  content: {
13596
- "application/json": components["schemas"]["CreateLimitResponse"];
15686
+ "application/json": components["schemas"]["ListTokenCustodyResponse"];
13597
15687
  };
13598
15688
  };
13599
- /** @description Limit created successfully */
13600
- 201: {
15689
+ /** @description Public read rate limit exceeded for this client */
15690
+ 429: {
13601
15691
  headers: {
13602
15692
  [name: string]: unknown;
13603
15693
  };
13604
- content: {
13605
- "application/json": components["schemas"]["CreateLimitResponse"];
13606
- };
15694
+ content?: never;
13607
15695
  };
13608
- /** @description Invalid request or limit already exists */
13609
- 400: {
15696
+ /** @description Internal server error */
15697
+ 500: {
13610
15698
  headers: {
13611
15699
  [name: string]: unknown;
13612
15700
  };
13613
15701
  content?: never;
13614
15702
  };
13615
- /** @description Authentication required */
13616
- 401: {
15703
+ };
15704
+ };
15705
+ get_token_custody: {
15706
+ parameters: {
15707
+ query?: never;
15708
+ header?: never;
15709
+ path: {
15710
+ token: string;
15711
+ };
15712
+ cookie?: never;
15713
+ };
15714
+ requestBody?: never;
15715
+ responses: {
15716
+ /** @description OK */
15717
+ 200: {
13617
15718
  headers: {
13618
15719
  [name: string]: unknown;
13619
15720
  };
13620
- content?: never;
15721
+ content: {
15722
+ "application/json": components["schemas"]["GetTokenCustodyResponse"];
15723
+ };
13621
15724
  };
13622
- /** @description Only master accounts can set sub-account limits */
13623
- 403: {
15725
+ /** @description No token answers to this symbol, UUID or address */
15726
+ 404: {
13624
15727
  headers: {
13625
15728
  [name: string]: unknown;
13626
15729
  };
13627
15730
  content?: never;
13628
15731
  };
13629
- /** @description Sub-account relationship not found or asset not found */
13630
- 404: {
15732
+ /** @description Public read rate limit exceeded for this client */
15733
+ 429: {
13631
15734
  headers: {
13632
15735
  [name: string]: unknown;
13633
15736
  };
@@ -13642,14 +15745,11 @@ export interface operations {
13642
15745
  };
13643
15746
  };
13644
15747
  };
13645
- get_sub_account_limits: {
15748
+ get_treasury_net_fees: {
13646
15749
  parameters: {
13647
15750
  query?: never;
13648
15751
  header?: never;
13649
- path: {
13650
- /** @example 2b1a5f9c-0000-4000-8000-000000000005 */
13651
- subAccountId: string;
13652
- };
15752
+ path?: never;
13653
15753
  cookie?: never;
13654
15754
  };
13655
15755
  requestBody?: never;
@@ -13660,31 +15760,54 @@ export interface operations {
13660
15760
  [name: string]: unknown;
13661
15761
  };
13662
15762
  content: {
13663
- "application/json": components["schemas"]["GetLimitsResponse"];
15763
+ "application/json": components["schemas"]["GetTreasuryNetFeesResponse"];
13664
15764
  };
13665
15765
  };
13666
- /** @description Invalid request */
13667
- 400: {
15766
+ /** @description Public read rate limit exceeded for this client */
15767
+ 429: {
13668
15768
  headers: {
13669
15769
  [name: string]: unknown;
13670
15770
  };
13671
15771
  content?: never;
13672
15772
  };
13673
- /** @description Authentication required */
13674
- 401: {
15773
+ /** @description Internal server error */
15774
+ 500: {
13675
15775
  headers: {
13676
15776
  [name: string]: unknown;
13677
15777
  };
13678
15778
  content?: never;
13679
15779
  };
13680
- /** @description Sub-account not found */
13681
- 404: {
15780
+ };
15781
+ };
15782
+ list_wallet_leaderboard: {
15783
+ parameters: {
15784
+ query?: {
15785
+ /** @description Wallets to return, largest volume first (max 100) */
15786
+ limit?: number;
15787
+ };
15788
+ header?: never;
15789
+ path?: never;
15790
+ cookie?: never;
15791
+ };
15792
+ requestBody?: never;
15793
+ responses: {
15794
+ /** @description OK */
15795
+ 200: {
15796
+ headers: {
15797
+ [name: string]: unknown;
15798
+ };
15799
+ content: {
15800
+ "application/json": components["schemas"]["ListWalletLeaderboardResponse"];
15801
+ };
15802
+ };
15803
+ /** @description Invalid limit */
15804
+ 400: {
13682
15805
  headers: {
13683
15806
  [name: string]: unknown;
13684
15807
  };
13685
15808
  content?: never;
13686
15809
  };
13687
- /** @description Read rate limit exceeded — every authenticated read draws one request from the account's read budget; retry after the interval in details.retryAfter */
15810
+ /** @description Public read rate limit exceeded for this client */
13688
15811
  429: {
13689
15812
  headers: {
13690
15813
  [name: string]: unknown;
@@ -13700,23 +15823,16 @@ export interface operations {
13700
15823
  };
13701
15824
  };
13702
15825
  };
13703
- update_sub_account_limit: {
15826
+ get_wallet_summary: {
13704
15827
  parameters: {
13705
15828
  query?: never;
13706
15829
  header?: never;
13707
15830
  path: {
13708
- /** @example 2b1a5f9c-0000-4000-8000-000000000005 */
13709
- subAccountId: string;
13710
- /** @example 1905d968-cc65-4cc7-b77c-1905d968cc65 */
13711
- assetId: string;
15831
+ wallet: string;
13712
15832
  };
13713
15833
  cookie?: never;
13714
15834
  };
13715
- requestBody: {
13716
- content: {
13717
- "application/json": components["schemas"]["UpdateLimitRequest"];
13718
- };
13719
- };
15835
+ requestBody?: never;
13720
15836
  responses: {
13721
15837
  /** @description OK */
13722
15838
  200: {
@@ -13724,32 +15840,18 @@ export interface operations {
13724
15840
  [name: string]: unknown;
13725
15841
  };
13726
15842
  content: {
13727
- "application/json": components["schemas"]["UpdateLimitResponse"];
15843
+ "application/json": components["schemas"]["GetWalletSummaryResponse"];
13728
15844
  };
13729
15845
  };
13730
- /** @description Invalid request */
15846
+ /** @description Invalid wallet address */
13731
15847
  400: {
13732
15848
  headers: {
13733
15849
  [name: string]: unknown;
13734
15850
  };
13735
15851
  content?: never;
13736
15852
  };
13737
- /** @description Authentication required */
13738
- 401: {
13739
- headers: {
13740
- [name: string]: unknown;
13741
- };
13742
- content?: never;
13743
- };
13744
- /** @description Only master accounts can update sub-account limits */
13745
- 403: {
13746
- headers: {
13747
- [name: string]: unknown;
13748
- };
13749
- content?: never;
13750
- };
13751
- /** @description Limit not found */
13752
- 404: {
15853
+ /** @description Public read rate limit exceeded for this client */
15854
+ 429: {
13753
15855
  headers: {
13754
15856
  [name: string]: unknown;
13755
15857
  };
@@ -13764,18 +15866,17 @@ export interface operations {
13764
15866
  };
13765
15867
  };
13766
15868
  };
13767
- delete_sub_account_limit: {
15869
+ list_wallet_liquidations: {
13768
15870
  parameters: {
13769
15871
  query?: {
13770
- /** @description Limit identifier (UUID) */
13771
- limitId?: string;
15872
+ /** @description Events per page (max 1000) */
15873
+ pageSize?: number;
15874
+ /** @description Opaque keyset cursor from the previous response, bound to the wallet. */
15875
+ pageToken?: string;
13772
15876
  };
13773
15877
  header?: never;
13774
15878
  path: {
13775
- /** @example 2b1a5f9c-0000-4000-8000-000000000005 */
13776
- subAccountId: string;
13777
- /** @example 1905d968-cc65-4cc7-b77c-1905d968cc65 */
13778
- assetId: string;
15879
+ wallet: string;
13779
15880
  };
13780
15881
  cookie?: never;
13781
15882
  };
@@ -13787,32 +15888,18 @@ export interface operations {
13787
15888
  [name: string]: unknown;
13788
15889
  };
13789
15890
  content: {
13790
- "application/json": components["schemas"]["DeleteLimitResponse"];
15891
+ "application/json": components["schemas"]["ListWalletLiquidationsResponse"];
13791
15892
  };
13792
15893
  };
13793
- /** @description Invalid request */
15894
+ /** @description Invalid wallet address, page size or page token */
13794
15895
  400: {
13795
15896
  headers: {
13796
15897
  [name: string]: unknown;
13797
15898
  };
13798
15899
  content?: never;
13799
15900
  };
13800
- /** @description Authentication required */
13801
- 401: {
13802
- headers: {
13803
- [name: string]: unknown;
13804
- };
13805
- content?: never;
13806
- };
13807
- /** @description Only master accounts can delete sub-account limits */
13808
- 403: {
13809
- headers: {
13810
- [name: string]: unknown;
13811
- };
13812
- content?: never;
13813
- };
13814
- /** @description Limit not found */
13815
- 404: {
15901
+ /** @description Public read rate limit exceeded for this client */
15902
+ 429: {
13816
15903
  headers: {
13817
15904
  [name: string]: unknown;
13818
15905
  };
@@ -13827,41 +15914,15 @@ export interface operations {
13827
15914
  };
13828
15915
  };
13829
15916
  };
13830
- get_user_trades: {
15917
+ list_vault_withdrawals: {
13831
15918
  parameters: {
13832
15919
  query?: {
13833
- /** @description Items per page (max: 100 in page-number mode; up to 1000 when pageToken is present) */
15920
+ /** @description Withdrawals per page (max 1000) */
13834
15921
  pageSize?: number;
13835
- /** @description Trading pair identifier (UUID) */
13836
- tradingPairId?: string;
13837
- /**
13838
- * @description Pagination cursor with two states:
13839
- * - Omitted or empty string (""): start a cursor walk with no prior
13840
- * position, from the newest row.
13841
- * - Non-empty: an opaque cursor from a previous response's
13842
- * `nextPageToken`; results resume immediately after that position.
13843
- *
13844
- * Every walk covers full trade history — hot and archived rows merged. An
13845
- * unfiltered response carries a bounded item count (`total`); a response
13846
- * filtered by `trading_pair_id` carries none. Filters must match the request
13847
- * that produced the token.
13848
- */
15922
+ /** @description Opaque keyset cursor from the previous response, bound to the filters. */
13849
15923
  pageToken?: string;
13850
- /**
13851
- * @description Optional margin account UUID filter: only trades where this user's side of
13852
- * the fill was placed from this margin account. A self-trade is read as its
13853
- * maker side, so it matches through its maker order's account. Like
13854
- * `trading_pair_id`, a filtered response carries no `total`, and the filter
13855
- * must match the request that produced a `page_token`.
13856
- */
13857
- marginAccountId?: string;
13858
- /**
13859
- * @description Optional order UUID filter: only trades where this user's side of the
13860
- * fill was placed by this order. A self-trade is read as its maker side, so
13861
- * it matches its maker order only. A filtered response carries no `total`,
13862
- * and the filter must match the request that produced a `page_token`.
13863
- */
13864
- orderId?: string;
15924
+ token?: string;
15925
+ wallet?: string;
13865
15926
  };
13866
15927
  header?: never;
13867
15928
  path?: never;
@@ -13875,24 +15936,17 @@ export interface operations {
13875
15936
  [name: string]: unknown;
13876
15937
  };
13877
15938
  content: {
13878
- "application/json": components["schemas"]["GetUserTradesResponse"];
15939
+ "application/json": components["schemas"]["ListVaultWithdrawalsResponse"];
13879
15940
  };
13880
15941
  };
13881
- /** @description Invalid request */
15942
+ /** @description Invalid page size or page token */
13882
15943
  400: {
13883
15944
  headers: {
13884
15945
  [name: string]: unknown;
13885
15946
  };
13886
15947
  content?: never;
13887
15948
  };
13888
- /** @description Authentication required */
13889
- 401: {
13890
- headers: {
13891
- [name: string]: unknown;
13892
- };
13893
- content?: never;
13894
- };
13895
- /** @description Read rate limit exceeded — every authenticated read draws one request from the account's read budget; retry after the interval in details.retryAfter */
15949
+ /** @description Public read rate limit exceeded for this client */
13896
15950
  429: {
13897
15951
  headers: {
13898
15952
  [name: string]: unknown;
@@ -13961,7 +16015,7 @@ export interface operations {
13961
16015
  };
13962
16016
  content?: never;
13963
16017
  };
13964
- /** @description No active application has this client_id */
16018
+ /** @description No active, displayed application has this client_id (unknown, inactive and hidden builders read alike) */
13965
16019
  404: {
13966
16020
  headers: {
13967
16021
  [name: string]: unknown;
@@ -14092,7 +16146,7 @@ export interface operations {
14092
16146
  };
14093
16147
  content?: never;
14094
16148
  };
14095
- /** @description No active application has this client_id */
16149
+ /** @description No active, displayed application has this client_id (unknown, inactive and hidden builders read alike) */
14096
16150
  404: {
14097
16151
  headers: {
14098
16152
  [name: string]: unknown;
@@ -14170,7 +16224,7 @@ export interface operations {
14170
16224
  };
14171
16225
  content?: never;
14172
16226
  };
14173
- /** @description No active application has this client_id */
16227
+ /** @description No active, displayed application has this client_id (unknown, inactive and hidden builders read alike) */
14174
16228
  404: {
14175
16229
  headers: {
14176
16230
  [name: string]: unknown;
@@ -14222,7 +16276,7 @@ export interface operations {
14222
16276
  };
14223
16277
  content?: never;
14224
16278
  };
14225
- /** @description No active application has this client_id */
16279
+ /** @description No active, displayed application has this client_id (unknown, inactive and hidden builders read alike) */
14226
16280
  404: {
14227
16281
  headers: {
14228
16282
  [name: string]: unknown;
@@ -14299,7 +16353,7 @@ export interface operations {
14299
16353
  };
14300
16354
  content?: never;
14301
16355
  };
14302
- /** @description No active application has this client_id */
16356
+ /** @description No active, displayed application has this client_id (unknown, inactive and hidden builders read alike) */
14303
16357
  404: {
14304
16358
  headers: {
14305
16359
  [name: string]: unknown;
@@ -14960,7 +17014,7 @@ export interface operations {
14960
17014
  };
14961
17015
  content?: never;
14962
17016
  };
14963
- /** @description Insufficient BuilderCodes payout balance, including a wallet that never accrued one (gRPC: FAILED_PRECONDITION) */
17017
+ /** @description Insufficient BuilderCodes payout balance, including a wallet that never accrued one (gRPC: FAILED_PRECONDITION); or `code: IDEMPOTENCY_KEY_CONFLICT`, the idempotencyKey already names a different request (gRPC: ALREADY_EXISTS) */
14964
17018
  409: {
14965
17019
  headers: {
14966
17020
  [name: string]: unknown;
@@ -14981,7 +17035,7 @@ export interface operations {
14981
17035
  };
14982
17036
  content?: never;
14983
17037
  };
14984
- /** @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) */
17038
+ /** @description Matching engine unavailable or slow to answer. Outcome UNKNOWN, not a rejection — the claim may still commit. With an idempotencyKey, retry with the same key and request within 15 minutes; `code: ORDER_SUBMISSION_UNAVAILABLE` or `ORDER_SUBMISSION_CAPACITY_EXCEEDED` asks for exactly that. Without one, 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) */
14985
17039
  503: {
14986
17040
  headers: {
14987
17041
  [name: string]: unknown;
@@ -18290,7 +20344,7 @@ export interface operations {
18290
20344
  get_orderbook_snapshot: {
18291
20345
  parameters: {
18292
20346
  query?: {
18293
- /** @description Number of price levels (max 100) */
20347
+ /** @description Number of price levels per side (max 1000). Above 100 the snapshot comes from the market-data book and carries bookSeq */
18294
20348
  levels?: number;
18295
20349
  /** @description Trading mode */
18296
20350
  tradingMode?: "SPOT" | "MARGIN";
@@ -18317,7 +20371,7 @@ export interface operations {
18317
20371
  "application/json": components["schemas"]["GetOrderbookResponse"];
18318
20372
  };
18319
20373
  };
18320
- /** @description Invalid magnitude or denomination value */
20374
+ /** @description levels outside 1 to 1000, a tradingMode that is invalid or not the pair's, or an invalid magnitude or denomination value */
18321
20375
  400: {
18322
20376
  headers: {
18323
20377
  [name: string]: unknown;
@@ -18331,13 +20385,27 @@ export interface operations {
18331
20385
  };
18332
20386
  content?: never;
18333
20387
  };
18334
- /** @description Matching engine not initialized or internal error */
20388
+ /** @description Deep orderbook read budget exceeded for this client IP on the public ingress (reads above 100 levels cost ceil(levels/100) units; PrivateLink is not metered); retry after the interval in details.retryAfter */
20389
+ 429: {
20390
+ headers: {
20391
+ [name: string]: unknown;
20392
+ };
20393
+ content?: never;
20394
+ };
20395
+ /** @description Internal error */
18335
20396
  500: {
18336
20397
  headers: {
18337
20398
  [name: string]: unknown;
18338
20399
  };
18339
20400
  content?: never;
18340
20401
  };
20402
+ /** @description The book cannot be read right now: the market-data service above 100 levels, the matching engine at 100 or fewer, or the gateway's matching-engine client is not ready (at any depth); retry */
20403
+ 503: {
20404
+ headers: {
20405
+ [name: string]: unknown;
20406
+ };
20407
+ content?: never;
20408
+ };
18341
20409
  };
18342
20410
  };
18343
20411
  get_orders: {