squarefi-bff-api-module 1.36.30 → 1.36.32

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.
@@ -2124,7 +2124,7 @@ export interface paths {
2124
2124
  * Format: uuid
2125
2125
  * @description Optional. Binds the card to a wallet member so a scoped `user` role can
2126
2126
  * access ONLY this card (view, sensitive data, transactions, freeze/unfreeze),
2127
- * and nothing else in the wallet (SFI-1382). Must be the `user_data.uuid` of an
2127
+ * and nothing else in the wallet. Must be the `user_data.uuid` of an
2128
2128
  * active member of the target wallet; resolved server-side to the card's owner.
2129
2129
  *
2130
2130
  * @example a1b2c3d4-e5f6-7890-abcd-ef1234567890
@@ -2818,11 +2818,13 @@ export interface paths {
2818
2818
  put?: never;
2819
2819
  /**
2820
2820
  * Deposit funds to card
2821
- * @description Deposits funds to a card from the associated wallet.
2821
+ * @description Thin wrapper over the sub-account deposit: the card's sub-account is
2822
+ * resolved from `card_id` and the request is processed by the same
2823
+ * implementation as POST /frontend/issuing/sub-accounts/{sub_account_id}/deposit
2824
+ * (same order types, validation and program routing).
2822
2825
  *
2823
- * **Authentication**: Bearer token with x-tenant-id header required
2824
- *
2825
- * **Access Control**: User must have access to the card
2826
+ * **Authentication**: Bearer token with x-tenant-id header required.
2827
+ * **Access Control**: wallet ADMIN role on the card's wallet.
2826
2828
  *
2827
2829
  */
2828
2830
  post: {
@@ -2840,85 +2842,53 @@ export interface paths {
2840
2842
  "application/json": {
2841
2843
  /**
2842
2844
  * Format: uuid
2843
- * @description Unique reference ID for idempotency (must be valid UUID)
2844
- * @example 550e8400-e29b-41d4-a716-446655440000
2845
+ * @description Unique reference ID for idempotency
2845
2846
  */
2846
2847
  reference_id: string;
2847
2848
  /**
2848
2849
  * Format: uuid
2849
- * @description UUID of the currency to deduct from wallet
2850
- * @example 509eca03-bc0d-4a38-b7dc-d136d2bdaa43
2850
+ * @description UUID of the currency to deduct from the wallet
2851
2851
  */
2852
2852
  from_currency_id: string;
2853
- /**
2854
- * @description Amount to deposit
2855
- * @example 100.5
2856
- */
2857
2853
  amount: number;
2858
- /**
2859
- * @description Optional description for the deposit
2860
- * @example Monthly card funding
2861
- */
2862
2854
  note?: string;
2863
2855
  };
2864
2856
  };
2865
2857
  };
2866
2858
  responses: {
2867
- /** @description Deposit successful */
2859
+ /** @description Deposit order created (COMPLETE, FAILED, or PROCESSING for workflow-routed programs) */
2868
2860
  200: {
2869
2861
  headers: {
2870
2862
  [name: string]: unknown;
2871
2863
  };
2872
- content: {
2873
- "application/json": {
2874
- /** @example true */
2875
- success?: boolean;
2876
- data?: {
2877
- /**
2878
- * Format: uuid
2879
- * @description Unique order identifier
2880
- */
2881
- order_uuid?: string;
2882
- /** @description Transaction ID for tracking */
2883
- transaction_id?: string;
2884
- /** @enum {string} */
2885
- status?: "PENDING" | "COMPLETE" | "FAILED";
2886
- amount_from?: number;
2887
- amount_to?: number;
2888
- /** Format: date-time */
2889
- created_at?: string;
2890
- };
2891
- };
2892
- };
2864
+ content?: never;
2893
2865
  };
2894
- /** @description Bad Request - One of the following:
2895
- * - Missing required fields
2896
- * - Invalid reference_id format
2897
- * - Invalid amount (must be positive number)
2898
- * */
2866
+ /** @description Validation error */
2899
2867
  400: {
2900
2868
  headers: {
2901
2869
  [name: string]: unknown;
2902
2870
  };
2903
- content?: never;
2871
+ content: {
2872
+ "application/json": components["schemas"]["ErrorResponse"];
2873
+ };
2904
2874
  };
2905
- /** @description Forbidden - One of the following:
2906
- * - Access denied to this card
2907
- * - Insufficient wallet balance
2908
- * - Topup not allowed (limits exceeded)
2909
- * */
2875
+ /** @description Access denied to this card */
2910
2876
  403: {
2911
2877
  headers: {
2912
2878
  [name: string]: unknown;
2913
2879
  };
2914
- content?: never;
2880
+ content: {
2881
+ "application/json": components["schemas"]["ErrorResponse"];
2882
+ };
2915
2883
  };
2916
- /** @description Card or wallet not found */
2884
+ /** @description Card or sub-account not found */
2917
2885
  404: {
2918
2886
  headers: {
2919
2887
  [name: string]: unknown;
2920
2888
  };
2921
- content?: never;
2889
+ content: {
2890
+ "application/json": components["schemas"]["ErrorResponse"];
2891
+ };
2922
2892
  };
2923
2893
  };
2924
2894
  };
@@ -2939,13 +2909,14 @@ export interface paths {
2939
2909
  put?: never;
2940
2910
  /**
2941
2911
  * Withdraw funds from card
2942
- * @description Withdraws funds from a card back to the associated wallet.
2943
- *
2944
- * **Authentication**: Bearer token with x-tenant-id header required
2945
- *
2946
- * **Access Control**: User must have access to the card
2912
+ * @description Thin wrapper over the sub-account withdraw: the card's sub-account is
2913
+ * resolved from `card_id` and the request is processed by the same
2914
+ * implementation as POST /frontend/issuing/sub-accounts/{sub_account_id}/withdraw
2915
+ * (same order types and validation; concurrent withdrawals on the same
2916
+ * sub-account are rejected with 409).
2947
2917
  *
2948
- * **Note**: This endpoint may not be implemented yet.
2918
+ * **Authentication**: Bearer token with x-tenant-id header required.
2919
+ * **Access Control**: wallet ADMIN role on the card's wallet.
2949
2920
  *
2950
2921
  */
2951
2922
  post: {
@@ -2961,60 +2932,54 @@ export interface paths {
2961
2932
  requestBody: {
2962
2933
  content: {
2963
2934
  "application/json": {
2964
- /**
2965
- * @description Amount to withdraw
2966
- * @example 50
2967
- */
2935
+ /** @description Amount to withdraw back to the wallet */
2968
2936
  amount: number;
2969
- /**
2970
- * @description Optional description for the withdrawal
2971
- * @example Refund to wallet
2972
- */
2973
- description?: string;
2974
2937
  };
2975
2938
  };
2976
2939
  };
2977
2940
  responses: {
2978
- /** @description Withdrawal successful */
2941
+ /** @description Withdrawal completed */
2979
2942
  200: {
2980
2943
  headers: {
2981
2944
  [name: string]: unknown;
2982
2945
  };
2983
- content: {
2984
- "application/json": {
2985
- /** @example true */
2986
- success?: boolean;
2987
- data?: {
2988
- /** Format: uuid */
2989
- transaction_id?: string;
2990
- amount?: number;
2991
- new_balance?: number;
2992
- /** @example completed */
2993
- status?: string;
2994
- };
2995
- };
2996
- };
2946
+ content?: never;
2997
2947
  };
2998
- /** @description Invalid amount or insufficient card balance */
2948
+ /** @description Validation error */
2999
2949
  400: {
3000
2950
  headers: {
3001
2951
  [name: string]: unknown;
3002
2952
  };
3003
- content?: never;
2953
+ content: {
2954
+ "application/json": components["schemas"]["ErrorResponse"];
2955
+ };
3004
2956
  };
3005
2957
  /** @description Access denied to this card */
3006
2958
  403: {
3007
2959
  headers: {
3008
2960
  [name: string]: unknown;
3009
2961
  };
3010
- content?: never;
2962
+ content: {
2963
+ "application/json": components["schemas"]["ErrorResponse"];
2964
+ };
3011
2965
  };
3012
- /** @description Not implemented */
3013
- 501: {
2966
+ /** @description Card or sub-account not found */
2967
+ 404: {
3014
2968
  headers: {
3015
2969
  [name: string]: unknown;
3016
2970
  };
3017
- content?: never;
2971
+ content: {
2972
+ "application/json": components["schemas"]["ErrorResponse"];
2973
+ };
2974
+ };
2975
+ /** @description Another withdrawal for this sub-account is in progress */
2976
+ 409: {
2977
+ headers: {
2978
+ [name: string]: unknown;
2979
+ };
2980
+ content: {
2981
+ "application/json": components["schemas"]["ErrorResponse"];
2982
+ };
3018
2983
  };
3019
2984
  };
3020
2985
  };
@@ -4914,89 +4879,117 @@ export interface paths {
4914
4879
  patch?: never;
4915
4880
  trace?: never;
4916
4881
  };
4917
- "/frontend/orders/deposit/ach": {
4882
+ "/frontend/mass-payouts/{wallet_id}": {
4918
4883
  parameters: {
4919
4884
  query?: never;
4920
4885
  header?: never;
4921
4886
  path?: never;
4922
4887
  cookie?: never;
4923
4888
  };
4924
- get?: never;
4925
- put?: never;
4926
- /**
4927
- * ACH (coming soon)
4928
- * @description ACH deposit is not yet implemented. Returns 501.
4929
- */
4930
- post: {
4889
+ /** List mass payouts of a wallet */
4890
+ get: {
4931
4891
  parameters: {
4932
- query?: never;
4892
+ query?: {
4893
+ status?: "DRAFT" | "PENDING_APPROVAL" | "PROCESSING" | "COMPLETED" | "FAILED" | "CANCELED";
4894
+ limit?: number;
4895
+ offset?: number;
4896
+ };
4933
4897
  header?: never;
4934
- path?: never;
4935
- cookie?: never;
4936
- };
4937
- requestBody: {
4938
- content: {
4939
- "application/json": {
4940
- /** Format: uuid */
4941
- wallet_id: string;
4942
- amount?: number;
4943
- request_id?: string;
4944
- };
4898
+ path: {
4899
+ /** @description Source wallet the batches belong to */
4900
+ wallet_id: components["parameters"]["MassPayoutWalletId"];
4945
4901
  };
4902
+ cookie?: never;
4946
4903
  };
4904
+ requestBody?: never;
4947
4905
  responses: {
4948
- /** @description Not implemented */
4949
- 501: {
4906
+ /** @description Page of batches, newest first */
4907
+ 200: {
4950
4908
  headers: {
4951
4909
  [name: string]: unknown;
4952
4910
  };
4953
4911
  content: {
4954
- "application/json": components["schemas"]["ErrorResponse"];
4912
+ "application/json": {
4913
+ /** @example true */
4914
+ success?: boolean;
4915
+ data?: {
4916
+ items?: components["schemas"]["MassPayout"][];
4917
+ total?: number;
4918
+ limit?: number;
4919
+ offset?: number;
4920
+ };
4921
+ };
4955
4922
  };
4956
4923
  };
4957
4924
  };
4958
4925
  };
4959
- delete?: never;
4960
- options?: never;
4961
- head?: never;
4962
- patch?: never;
4963
- trace?: never;
4964
- };
4965
- "/frontend/orders/deposit/crypto": {
4966
- parameters: {
4967
- query?: never;
4968
- header?: never;
4969
- path?: never;
4970
- cookie?: never;
4971
- };
4972
- get?: never;
4973
4926
  put?: never;
4974
4927
  /**
4975
- * Crypto (coming soon)
4976
- * @description Crypto deposit is not yet implemented. Returns 501.
4928
+ * Create a mass payout draft
4929
+ * @description Creates a batch of payouts to existing counterparty destinations: one
4930
+ * source wallet, one currency, up to the tenant's batch-size limit of
4931
+ * recipients (default 100). The draft can be freely edited and
4932
+ * previewed; nothing moves until it is submitted and approved.
4933
+ * `virtual_account_id` is required only when the list contains banking
4934
+ * recipients. Requires an administrative role on the source wallet.
4935
+ *
4977
4936
  */
4978
4937
  post: {
4979
4938
  parameters: {
4980
4939
  query?: never;
4981
4940
  header?: never;
4982
- path?: never;
4941
+ path: {
4942
+ /** @description Source wallet the batches belong to */
4943
+ wallet_id: components["parameters"]["MassPayoutWalletId"];
4944
+ };
4983
4945
  cookie?: never;
4984
4946
  };
4985
4947
  requestBody: {
4986
4948
  content: {
4987
4949
  "application/json": {
4988
4950
  /** Format: uuid */
4989
- wallet_id: string;
4990
- amount?: number;
4951
+ currency_id: string;
4991
4952
  /** Format: uuid */
4992
- currency_id?: string;
4993
- request_id?: string;
4953
+ virtual_account_id?: string;
4954
+ name: string;
4955
+ items: components["schemas"]["MassPayoutItemInput"][];
4994
4956
  };
4995
4957
  };
4996
4958
  };
4997
4959
  responses: {
4998
- /** @description Not implemented */
4999
- 501: {
4960
+ /** @description Draft created */
4961
+ 200: {
4962
+ headers: {
4963
+ [name: string]: unknown;
4964
+ };
4965
+ content: {
4966
+ "application/json": {
4967
+ /** @example true */
4968
+ success?: boolean;
4969
+ data?: components["schemas"]["MassPayout"];
4970
+ };
4971
+ };
4972
+ };
4973
+ /** @description Validation error (including the batch-size limit) */
4974
+ 400: {
4975
+ headers: {
4976
+ [name: string]: unknown;
4977
+ };
4978
+ content: {
4979
+ "application/json": components["schemas"]["ErrorResponse"];
4980
+ };
4981
+ };
4982
+ /** @description Caller lacks permission on the source wallet */
4983
+ 403: {
4984
+ headers: {
4985
+ [name: string]: unknown;
4986
+ };
4987
+ content: {
4988
+ "application/json": components["schemas"]["ErrorResponse"];
4989
+ };
4990
+ };
4991
+ /** @description Rate limit exceeded */
4992
+ 429: {
5000
4993
  headers: {
5001
4994
  [name: string]: unknown;
5002
4995
  };
@@ -5012,39 +5005,42 @@ export interface paths {
5012
5005
  patch?: never;
5013
5006
  trace?: never;
5014
5007
  };
5015
- "/frontend/orders/deposit/pix": {
5008
+ "/frontend/mass-payouts/{wallet_id}/{id}": {
5016
5009
  parameters: {
5017
5010
  query?: never;
5018
5011
  header?: never;
5019
5012
  path?: never;
5020
5013
  cookie?: never;
5021
5014
  };
5022
- get?: never;
5023
- put?: never;
5024
- /**
5025
- * PIX (coming soon)
5026
- * @description PIX deposit is not yet implemented. Returns 501.
5027
- */
5028
- post: {
5015
+ /** Get a mass payout */
5016
+ get: {
5029
5017
  parameters: {
5030
5018
  query?: never;
5031
5019
  header?: never;
5032
- path?: never;
5020
+ path: {
5021
+ /** @description Source wallet the batches belong to */
5022
+ wallet_id: components["parameters"]["MassPayoutWalletId"];
5023
+ id: components["parameters"]["MassPayoutId"];
5024
+ };
5033
5025
  cookie?: never;
5034
5026
  };
5035
- requestBody: {
5036
- content: {
5037
- "application/json": {
5038
- /** Format: uuid */
5039
- wallet_id: string;
5040
- amount?: number;
5041
- request_id?: string;
5027
+ requestBody?: never;
5028
+ responses: {
5029
+ /** @description Batch details with progress counters and total amount */
5030
+ 200: {
5031
+ headers: {
5032
+ [name: string]: unknown;
5033
+ };
5034
+ content: {
5035
+ "application/json": {
5036
+ /** @example true */
5037
+ success?: boolean;
5038
+ data?: components["schemas"]["MassPayout"];
5039
+ };
5042
5040
  };
5043
5041
  };
5044
- };
5045
- responses: {
5046
- /** @description Not implemented */
5047
- 501: {
5042
+ /** @description Mass payout not found */
5043
+ 404: {
5048
5044
  headers: {
5049
5045
  [name: string]: unknown;
5050
5046
  };
@@ -5054,45 +5050,42 @@ export interface paths {
5054
5050
  };
5055
5051
  };
5056
5052
  };
5053
+ put?: never;
5054
+ post?: never;
5057
5055
  delete?: never;
5058
5056
  options?: never;
5059
5057
  head?: never;
5060
5058
  patch?: never;
5061
5059
  trace?: never;
5062
5060
  };
5063
- "/frontend/orders/deposit/card": {
5061
+ "/frontend/mass-payouts/{wallet_id}/{id}/items": {
5064
5062
  parameters: {
5065
5063
  query?: never;
5066
5064
  header?: never;
5067
5065
  path?: never;
5068
5066
  cookie?: never;
5069
5067
  };
5070
- get?: never;
5071
- put?: never;
5072
5068
  /**
5073
- * Card
5074
- * @description Returns funds from a card sub-account back to a wallet.
5069
+ * List items of a mass payout
5070
+ * @description Items in upload order, paginated with limit/offset like the batch list.
5075
5071
  */
5076
- post: {
5072
+ get: {
5077
5073
  parameters: {
5078
- query?: never;
5074
+ query?: {
5075
+ limit?: number;
5076
+ offset?: number;
5077
+ };
5079
5078
  header?: never;
5080
- path?: never;
5079
+ path: {
5080
+ /** @description Source wallet the batches belong to */
5081
+ wallet_id: components["parameters"]["MassPayoutWalletId"];
5082
+ id: components["parameters"]["MassPayoutId"];
5083
+ };
5081
5084
  cookie?: never;
5082
5085
  };
5083
- requestBody: {
5084
- content: {
5085
- "application/json": {
5086
- /** Format: uuid */
5087
- wallet_id: string;
5088
- amount: number;
5089
- /** Format: uuid */
5090
- sub_account_id: string;
5091
- };
5092
- };
5093
- };
5086
+ requestBody?: never;
5094
5087
  responses: {
5095
- /** @description Card return order created */
5088
+ /** @description Page of items */
5096
5089
  200: {
5097
5090
  headers: {
5098
5091
  [name: string]: unknown;
@@ -5101,95 +5094,54 @@ export interface paths {
5101
5094
  "application/json": {
5102
5095
  /** @example true */
5103
5096
  success?: boolean;
5104
- data?: components["schemas"]["Order"];
5105
- /** @example Card return order created */
5106
- message?: string;
5097
+ data?: {
5098
+ items?: components["schemas"]["MassPayoutItem"][];
5099
+ total?: number;
5100
+ limit?: number;
5101
+ offset?: number;
5102
+ };
5107
5103
  };
5108
5104
  };
5109
5105
  };
5110
- /** @description Missing required fields or invalid amount */
5111
- 400: {
5112
- headers: {
5113
- [name: string]: unknown;
5114
- };
5115
- content: {
5116
- "application/json": components["schemas"]["ErrorResponse"];
5117
- };
5118
- };
5119
- /** @description Authentication required */
5120
- 401: {
5121
- headers: {
5122
- [name: string]: unknown;
5123
- };
5124
- content: {
5125
- "application/json": components["schemas"]["ErrorResponse"];
5126
- };
5127
- };
5128
- /** @description Caller is not an admin of the wallet */
5129
- 403: {
5130
- headers: {
5131
- [name: string]: unknown;
5132
- };
5133
- content: {
5134
- "application/json": components["schemas"]["ErrorResponse"];
5135
- };
5136
- };
5137
- /** @description Card return failed */
5138
- 500: {
5139
- headers: {
5140
- [name: string]: unknown;
5141
- };
5142
- content: {
5143
- "application/json": components["schemas"]["ErrorResponse"];
5144
- };
5145
- };
5146
5106
  };
5147
5107
  };
5108
+ put?: never;
5109
+ post?: never;
5148
5110
  delete?: never;
5149
5111
  options?: never;
5150
5112
  head?: never;
5151
5113
  patch?: never;
5152
5114
  trace?: never;
5153
5115
  };
5154
- "/frontend/orders/exchange": {
5116
+ "/frontend/mass-payouts/{wallet_id}/{id}/preview": {
5155
5117
  parameters: {
5156
5118
  query?: never;
5157
5119
  header?: never;
5158
5120
  path?: never;
5159
5121
  cookie?: never;
5160
5122
  };
5161
- get?: never;
5162
- put?: never;
5163
5123
  /**
5164
- * Exchange
5165
- * @description Currency exchange within a wallet a pure ledger swap for any enabled
5166
- * currency pair (crypto and fiat alike). Pair availability is governed by
5167
- * the exchange calculation config: a disabled pair is rejected at create.
5168
- *
5169
- * Two-phase, like the banking withdrawals: the order is created in status
5170
- * `NEW` without touching the balance. Call `POST /frontend/orders/{order_id}/approve`
5171
- * (OTP-gated, keyed on the order id) to check the balance, debit the
5172
- * source funds and execute the swap — the order lands in `COMPLETE`
5173
- * synchronously — or `POST /frontend/orders/{order_id}/cancel` to
5174
- * discard the order.
5175
- *
5176
- * Caller must be `admin` of the wallet.
5124
+ * Preview a mass payout
5125
+ * @description Dry-run before submitting: validates every recipient, estimates the fee
5126
+ * per item through the tenant's pricing, sums the total debit and checks
5127
+ * it against the wallet balance. Crypto payouts to on-platform addresses
5128
+ * may execute cheaper than estimated (they settle internally).
5177
5129
  *
5178
5130
  */
5179
- post: {
5131
+ get: {
5180
5132
  parameters: {
5181
5133
  query?: never;
5182
5134
  header?: never;
5183
- path?: never;
5184
- cookie?: never;
5185
- };
5186
- requestBody: {
5187
- content: {
5188
- "application/json": components["schemas"]["FrontendExchangeOrderRequest"];
5135
+ path: {
5136
+ /** @description Source wallet the batches belong to */
5137
+ wallet_id: components["parameters"]["MassPayoutWalletId"];
5138
+ id: components["parameters"]["MassPayoutId"];
5189
5139
  };
5140
+ cookie?: never;
5190
5141
  };
5142
+ requestBody?: never;
5191
5143
  responses: {
5192
- /** @description Exchange order created (status NEW approve to debit and execute) */
5144
+ /** @description Validation report, fee estimates and balance check */
5193
5145
  200: {
5194
5146
  headers: {
5195
5147
  [name: string]: unknown;
@@ -5198,55 +5150,55 @@ export interface paths {
5198
5150
  "application/json": {
5199
5151
  /** @example true */
5200
5152
  success?: boolean;
5201
- data?: components["schemas"]["Order"];
5153
+ data?: {
5154
+ /** Format: uuid */
5155
+ id?: string;
5156
+ /** Format: uuid */
5157
+ currency_id?: string;
5158
+ total_items?: number;
5159
+ total_amount?: number;
5160
+ total_fees?: number;
5161
+ total_debit?: number;
5162
+ balance?: {
5163
+ available?: number;
5164
+ sufficient?: boolean;
5165
+ };
5166
+ valid_count?: number;
5167
+ invalid_count?: number;
5168
+ items?: {
5169
+ /** Format: uuid */
5170
+ item_id?: string;
5171
+ position?: number;
5172
+ /** Format: uuid */
5173
+ destination_id?: string;
5174
+ amount?: number;
5175
+ fee?: number;
5176
+ debit_amount?: number;
5177
+ result_amount?: number;
5178
+ }[];
5179
+ problems?: {
5180
+ /** Format: uuid */
5181
+ item_id?: string;
5182
+ position?: number;
5183
+ /** Format: uuid */
5184
+ destination_id?: string;
5185
+ error?: string;
5186
+ }[];
5187
+ };
5202
5188
  };
5203
5189
  };
5204
5190
  };
5205
- /** @description Validation error (insufficient balance, virtual account missing, etc.) */
5206
- 400: {
5207
- headers: {
5208
- [name: string]: unknown;
5209
- };
5210
- content: {
5211
- "application/json": components["schemas"]["ErrorResponse"];
5212
- };
5213
- };
5214
- /** @description Authentication required */
5215
- 401: {
5216
- headers: {
5217
- [name: string]: unknown;
5218
- };
5219
- content: {
5220
- "application/json": components["schemas"]["ErrorResponse"];
5221
- };
5222
- };
5223
- /** @description Caller is not an admin of the wallet */
5224
- 403: {
5225
- headers: {
5226
- [name: string]: unknown;
5227
- };
5228
- content: {
5229
- "application/json": components["schemas"]["ErrorResponse"];
5230
- };
5231
- };
5232
- /** @description Rate limit exceeded */
5233
- 429: {
5234
- headers: {
5235
- [name: string]: unknown;
5236
- };
5237
- content: {
5238
- "application/json": components["schemas"]["ErrorResponse"];
5239
- };
5240
- };
5241
5191
  };
5242
5192
  };
5193
+ put?: never;
5194
+ post?: never;
5243
5195
  delete?: never;
5244
5196
  options?: never;
5245
5197
  head?: never;
5246
5198
  patch?: never;
5247
5199
  trace?: never;
5248
5200
  };
5249
- "/frontend/orders/withdrawal/internal": {
5201
+ "/frontend/mass-payouts/{wallet_id}/{id}/submit": {
5250
5202
  parameters: {
5251
5203
  query?: never;
5252
5204
  header?: never;
@@ -5256,46 +5208,25 @@ export interface paths {
5256
5208
  get?: never;
5257
5209
  put?: never;
5258
5210
  /**
5259
- * Internal
5260
- * @description Transfers funds between two wallets within the platform. Two-phase:
5261
- * the order is created in `NEW` status without touching the balance;
5262
- * `POST /frontend/orders/{id}/approve` (OTP-gated, keyed on the order
5263
- * id) checks the balance, debits the sender and executes the transfer
5264
- * synchronously — receiver credited, order `COMPLETE`. A `NEW` order
5265
- * can simply be canceled (no funds are held).
5266
- * Caller must be `admin` of the source wallet.
5211
+ * Submit a mass payout for approval
5212
+ * @description DRAFT PENDING_APPROVAL. Refused while any recipient is invalid — the
5213
+ * problems are returned in the error details so the rows can be fixed.
5267
5214
  *
5268
5215
  */
5269
5216
  post: {
5270
5217
  parameters: {
5271
5218
  query?: never;
5272
5219
  header?: never;
5273
- path?: never;
5274
- cookie?: never;
5275
- };
5276
- requestBody: {
5277
- content: {
5278
- "application/json": {
5279
- /**
5280
- * Format: uuid
5281
- * @description Source wallet UUID
5282
- */
5283
- wallet_id: string;
5284
- /** Format: uuid */
5285
- from_currency_id: string;
5286
- /**
5287
- * Format: uuid
5288
- * @description Counterparty destination of type INTERNAL (points at the receiver wallet).
5289
- */
5290
- counterparty_destination_id: string;
5291
- amount: number;
5292
- /** @description Optional supporting documents persisted with the order. */
5293
- documents?: components["schemas"]["OrderDocumentInput"][];
5294
- };
5220
+ path: {
5221
+ /** @description Source wallet the batches belong to */
5222
+ wallet_id: components["parameters"]["MassPayoutWalletId"];
5223
+ id: components["parameters"]["MassPayoutId"];
5295
5224
  };
5225
+ cookie?: never;
5296
5226
  };
5227
+ requestBody?: never;
5297
5228
  responses: {
5298
- /** @description Transfer created in NEW status (awaiting approve; no funds held) */
5229
+ /** @description Batch is awaiting approval */
5299
5230
  200: {
5300
5231
  headers: {
5301
5232
  [name: string]: unknown;
@@ -5304,11 +5235,11 @@ export interface paths {
5304
5235
  "application/json": {
5305
5236
  /** @example true */
5306
5237
  success?: boolean;
5307
- data?: components["schemas"]["Order"];
5238
+ data?: components["schemas"]["MassPayout"];
5308
5239
  };
5309
5240
  };
5310
5241
  };
5311
- /** @description Validation error */
5242
+ /** @description Batch has invalid items (details carry the per-item problems) */
5312
5243
  400: {
5313
5244
  headers: {
5314
5245
  [name: string]: unknown;
@@ -5317,26 +5248,8 @@ export interface paths {
5317
5248
  "application/json": components["schemas"]["ErrorResponse"];
5318
5249
  };
5319
5250
  };
5320
- /** @description Authentication required */
5321
- 401: {
5322
- headers: {
5323
- [name: string]: unknown;
5324
- };
5325
- content: {
5326
- "application/json": components["schemas"]["ErrorResponse"];
5327
- };
5328
- };
5329
- /** @description Caller is not an admin of the source wallet */
5330
- 403: {
5331
- headers: {
5332
- [name: string]: unknown;
5333
- };
5334
- content: {
5335
- "application/json": components["schemas"]["ErrorResponse"];
5336
- };
5337
- };
5338
- /** @description Rate limit exceeded */
5339
- 429: {
5251
+ /** @description Batch is not in DRAFT */
5252
+ 409: {
5340
5253
  headers: {
5341
5254
  [name: string]: unknown;
5342
5255
  };
@@ -5352,7 +5265,7 @@ export interface paths {
5352
5265
  patch?: never;
5353
5266
  trace?: never;
5354
5267
  };
5355
- "/frontend/orders/withdrawal/crypto": {
5268
+ "/frontend/mass-payouts/{wallet_id}/{id}/approve": {
5356
5269
  parameters: {
5357
5270
  query?: never;
5358
5271
  header?: never;
@@ -5362,31 +5275,29 @@ export interface paths {
5362
5275
  get?: never;
5363
5276
  put?: never;
5364
5277
  /**
5365
- * Crypto
5366
- * @description Sends crypto from an omnibus wallet to an external address. Two-phase:
5367
- * the order is created in `NEW` status without touching the balance;
5368
- * `POST /frontend/orders/{id}/approve` (OTP-gated, keyed on the order
5369
- * id) checks the balance, debits the funds and dispatches the on-chain
5370
- * send. If the destination address belongs to a wallet in the same
5371
- * tenant, the order is created as `OMNIBUS_INTERNAL_TRANSFER` (no
5372
- * on-chain transaction) — still `NEW` at create, debited + settled
5373
- * synchronously to `COMPLETE` at approve.
5278
+ * Approve a mass payout
5279
+ * @description PENDING_APPROVAL PROCESSING and starts the asynchronous execution:
5280
+ * every item becomes a regular order (created and approved through the
5281
+ * standard order flow, funds are debited per order). Requires an
5282
+ * administrative wallet role and a recent second-factor verification a stale one is rejected
5283
+ * with `TWO_FACTOR_REVERIFICATION_REQUIRED`. Execution continues past
5284
+ * failed items; progress is visible through the batch counters.
5374
5285
  *
5375
5286
  */
5376
5287
  post: {
5377
5288
  parameters: {
5378
5289
  query?: never;
5379
5290
  header?: never;
5380
- path?: never;
5381
- cookie?: never;
5382
- };
5383
- requestBody: {
5384
- content: {
5385
- "application/json": components["schemas"]["FrontendCryptoTransferRequest"];
5291
+ path: {
5292
+ /** @description Source wallet the batches belong to */
5293
+ wallet_id: components["parameters"]["MassPayoutWalletId"];
5294
+ id: components["parameters"]["MassPayoutId"];
5386
5295
  };
5296
+ cookie?: never;
5387
5297
  };
5298
+ requestBody?: never;
5388
5299
  responses: {
5389
- /** @description Crypto withdrawal created */
5300
+ /** @description Execution started */
5390
5301
  200: {
5391
5302
  headers: {
5392
5303
  [name: string]: unknown;
@@ -5395,29 +5306,11 @@ export interface paths {
5395
5306
  "application/json": {
5396
5307
  /** @example true */
5397
5308
  success?: boolean;
5398
- data?: components["schemas"]["Order"];
5309
+ data?: components["schemas"]["MassPayout"];
5399
5310
  };
5400
5311
  };
5401
5312
  };
5402
- /** @description Validation error */
5403
- 400: {
5404
- headers: {
5405
- [name: string]: unknown;
5406
- };
5407
- content: {
5408
- "application/json": components["schemas"]["ErrorResponse"];
5409
- };
5410
- };
5411
- /** @description Authentication required */
5412
- 401: {
5413
- headers: {
5414
- [name: string]: unknown;
5415
- };
5416
- content: {
5417
- "application/json": components["schemas"]["ErrorResponse"];
5418
- };
5419
- };
5420
- /** @description Caller is not an admin of the source wallet */
5313
+ /** @description Second-factor verification is stale or the caller lacks permission */
5421
5314
  403: {
5422
5315
  headers: {
5423
5316
  [name: string]: unknown;
@@ -5426,8 +5319,8 @@ export interface paths {
5426
5319
  "application/json": components["schemas"]["ErrorResponse"];
5427
5320
  };
5428
5321
  };
5429
- /** @description Rate limit exceeded */
5430
- 429: {
5322
+ /** @description Batch is not awaiting approval */
5323
+ 409: {
5431
5324
  headers: {
5432
5325
  [name: string]: unknown;
5433
5326
  };
@@ -5443,7 +5336,7 @@ export interface paths {
5443
5336
  patch?: never;
5444
5337
  trace?: never;
5445
5338
  };
5446
- "/frontend/orders/withdrawal/wire": {
5339
+ "/frontend/mass-payouts/{wallet_id}/{id}/cancel": {
5447
5340
  parameters: {
5448
5341
  query?: never;
5449
5342
  header?: never;
@@ -5452,21 +5345,24 @@ export interface paths {
5452
5345
  };
5453
5346
  get?: never;
5454
5347
  put?: never;
5455
- /** Wire */
5348
+ /**
5349
+ * Cancel a mass payout
5350
+ * @description Allowed from DRAFT and PENDING_APPROVAL. A PROCESSING batch cannot be canceled — payouts are already executing.
5351
+ */
5456
5352
  post: {
5457
5353
  parameters: {
5458
5354
  query?: never;
5459
5355
  header?: never;
5460
- path?: never;
5461
- cookie?: never;
5462
- };
5463
- requestBody: {
5464
- content: {
5465
- "application/json": components["schemas"]["FrontendL2FOrderRequest"];
5356
+ path: {
5357
+ /** @description Source wallet the batches belong to */
5358
+ wallet_id: components["parameters"]["MassPayoutWalletId"];
5359
+ id: components["parameters"]["MassPayoutId"];
5466
5360
  };
5361
+ cookie?: never;
5467
5362
  };
5363
+ requestBody?: never;
5468
5364
  responses: {
5469
- /** @description Wire withdrawal created */
5365
+ /** @description Batch canceled */
5470
5366
  200: {
5471
5367
  headers: {
5472
5368
  [name: string]: unknown;
@@ -5475,21 +5371,12 @@ export interface paths {
5475
5371
  "application/json": {
5476
5372
  /** @example true */
5477
5373
  success?: boolean;
5478
- data?: components["schemas"]["Order"];
5374
+ data?: components["schemas"]["MassPayout"];
5479
5375
  };
5480
5376
  };
5481
5377
  };
5482
- /** @description Validation error */
5483
- 400: {
5484
- headers: {
5485
- [name: string]: unknown;
5486
- };
5487
- content: {
5488
- "application/json": components["schemas"]["ErrorResponse"];
5489
- };
5490
- };
5491
- /** @description Authentication required */
5492
- 401: {
5378
+ /** @description Batch can no longer be canceled */
5379
+ 409: {
5493
5380
  headers: {
5494
5381
  [name: string]: unknown;
5495
5382
  };
@@ -5497,17 +5384,51 @@ export interface paths {
5497
5384
  "application/json": components["schemas"]["ErrorResponse"];
5498
5385
  };
5499
5386
  };
5500
- /** @description Caller is not an admin of the source wallet */
5501
- 403: {
5387
+ };
5388
+ };
5389
+ delete?: never;
5390
+ options?: never;
5391
+ head?: never;
5392
+ patch?: never;
5393
+ trace?: never;
5394
+ };
5395
+ "/frontend/mass-payouts/{wallet_id}/{id}/report.csv": {
5396
+ parameters: {
5397
+ query?: never;
5398
+ header?: never;
5399
+ path?: never;
5400
+ cookie?: never;
5401
+ };
5402
+ /**
5403
+ * Download the mass payout report (CSV)
5404
+ * @description Streaming CSV: recipient, amount, item status, the linked order and its
5405
+ * current status, and the failure reason for every unsuccessful payout.
5406
+ *
5407
+ */
5408
+ get: {
5409
+ parameters: {
5410
+ query?: never;
5411
+ header?: never;
5412
+ path: {
5413
+ /** @description Source wallet the batches belong to */
5414
+ wallet_id: components["parameters"]["MassPayoutWalletId"];
5415
+ id: components["parameters"]["MassPayoutId"];
5416
+ };
5417
+ cookie?: never;
5418
+ };
5419
+ requestBody?: never;
5420
+ responses: {
5421
+ /** @description CSV file */
5422
+ 200: {
5502
5423
  headers: {
5503
5424
  [name: string]: unknown;
5504
5425
  };
5505
5426
  content: {
5506
- "application/json": components["schemas"]["ErrorResponse"];
5427
+ "text/csv": string;
5507
5428
  };
5508
5429
  };
5509
- /** @description Rate limit exceeded */
5510
- 429: {
5430
+ /** @description Mass payout not found */
5431
+ 404: {
5511
5432
  headers: {
5512
5433
  [name: string]: unknown;
5513
5434
  };
@@ -5517,13 +5438,15 @@ export interface paths {
5517
5438
  };
5518
5439
  };
5519
5440
  };
5441
+ put?: never;
5442
+ post?: never;
5520
5443
  delete?: never;
5521
5444
  options?: never;
5522
5445
  head?: never;
5523
5446
  patch?: never;
5524
5447
  trace?: never;
5525
5448
  };
5526
- "/frontend/orders/withdrawal/ach": {
5449
+ "/frontend/orders/deposit/ach": {
5527
5450
  parameters: {
5528
5451
  query?: never;
5529
5452
  header?: never;
@@ -5532,7 +5455,10 @@ export interface paths {
5532
5455
  };
5533
5456
  get?: never;
5534
5457
  put?: never;
5535
- /** ACH */
5458
+ /**
5459
+ * ACH (coming soon)
5460
+ * @description ACH deposit is not yet implemented. Returns 501.
5461
+ */
5536
5462
  post: {
5537
5463
  parameters: {
5538
5464
  query?: never;
@@ -5542,34 +5468,67 @@ export interface paths {
5542
5468
  };
5543
5469
  requestBody: {
5544
5470
  content: {
5545
- "application/json": components["schemas"]["FrontendL2FOrderRequest"];
5471
+ "application/json": {
5472
+ /** Format: uuid */
5473
+ wallet_id: string;
5474
+ amount?: number;
5475
+ request_id?: string;
5476
+ };
5546
5477
  };
5547
5478
  };
5548
5479
  responses: {
5549
- /** @description ACH withdrawal created */
5550
- 200: {
5480
+ /** @description Not implemented */
5481
+ 501: {
5551
5482
  headers: {
5552
5483
  [name: string]: unknown;
5553
5484
  };
5554
5485
  content: {
5555
- "application/json": {
5556
- /** @example true */
5557
- success?: boolean;
5558
- data?: components["schemas"]["Order"];
5559
- };
5486
+ "application/json": components["schemas"]["ErrorResponse"];
5560
5487
  };
5561
5488
  };
5562
- /** @description Validation error */
5563
- 400: {
5564
- headers: {
5565
- [name: string]: unknown;
5566
- };
5567
- content: {
5568
- "application/json": components["schemas"]["ErrorResponse"];
5489
+ };
5490
+ };
5491
+ delete?: never;
5492
+ options?: never;
5493
+ head?: never;
5494
+ patch?: never;
5495
+ trace?: never;
5496
+ };
5497
+ "/frontend/orders/deposit/crypto": {
5498
+ parameters: {
5499
+ query?: never;
5500
+ header?: never;
5501
+ path?: never;
5502
+ cookie?: never;
5503
+ };
5504
+ get?: never;
5505
+ put?: never;
5506
+ /**
5507
+ * Crypto (coming soon)
5508
+ * @description Crypto deposit is not yet implemented. Returns 501.
5509
+ */
5510
+ post: {
5511
+ parameters: {
5512
+ query?: never;
5513
+ header?: never;
5514
+ path?: never;
5515
+ cookie?: never;
5516
+ };
5517
+ requestBody: {
5518
+ content: {
5519
+ "application/json": {
5520
+ /** Format: uuid */
5521
+ wallet_id: string;
5522
+ amount?: number;
5523
+ /** Format: uuid */
5524
+ currency_id?: string;
5525
+ request_id?: string;
5569
5526
  };
5570
5527
  };
5571
- /** @description Authentication required */
5572
- 401: {
5528
+ };
5529
+ responses: {
5530
+ /** @description Not implemented */
5531
+ 501: {
5573
5532
  headers: {
5574
5533
  [name: string]: unknown;
5575
5534
  };
@@ -5577,17 +5536,47 @@ export interface paths {
5577
5536
  "application/json": components["schemas"]["ErrorResponse"];
5578
5537
  };
5579
5538
  };
5580
- /** @description Caller is not an admin of the source wallet */
5581
- 403: {
5582
- headers: {
5583
- [name: string]: unknown;
5584
- };
5585
- content: {
5586
- "application/json": components["schemas"]["ErrorResponse"];
5539
+ };
5540
+ };
5541
+ delete?: never;
5542
+ options?: never;
5543
+ head?: never;
5544
+ patch?: never;
5545
+ trace?: never;
5546
+ };
5547
+ "/frontend/orders/deposit/pix": {
5548
+ parameters: {
5549
+ query?: never;
5550
+ header?: never;
5551
+ path?: never;
5552
+ cookie?: never;
5553
+ };
5554
+ get?: never;
5555
+ put?: never;
5556
+ /**
5557
+ * PIX (coming soon)
5558
+ * @description PIX deposit is not yet implemented. Returns 501.
5559
+ */
5560
+ post: {
5561
+ parameters: {
5562
+ query?: never;
5563
+ header?: never;
5564
+ path?: never;
5565
+ cookie?: never;
5566
+ };
5567
+ requestBody: {
5568
+ content: {
5569
+ "application/json": {
5570
+ /** Format: uuid */
5571
+ wallet_id: string;
5572
+ amount?: number;
5573
+ request_id?: string;
5587
5574
  };
5588
5575
  };
5589
- /** @description Rate limit exceeded */
5590
- 429: {
5576
+ };
5577
+ responses: {
5578
+ /** @description Not implemented */
5579
+ 501: {
5591
5580
  headers: {
5592
5581
  [name: string]: unknown;
5593
5582
  };
@@ -5603,7 +5592,7 @@ export interface paths {
5603
5592
  patch?: never;
5604
5593
  trace?: never;
5605
5594
  };
5606
- "/frontend/orders/withdrawal/sepa": {
5595
+ "/frontend/orders/exchange": {
5607
5596
  parameters: {
5608
5597
  query?: never;
5609
5598
  header?: never;
@@ -5612,7 +5601,22 @@ export interface paths {
5612
5601
  };
5613
5602
  get?: never;
5614
5603
  put?: never;
5615
- /** SEPA */
5604
+ /**
5605
+ * Exchange
5606
+ * @description Currency exchange within a wallet — a pure ledger swap for any enabled
5607
+ * currency pair (crypto and fiat alike). Pair availability is governed by
5608
+ * the exchange calculation config: a disabled pair is rejected at create.
5609
+ *
5610
+ * Two-phase, like the banking withdrawals: the order is created in status
5611
+ * `NEW` without touching the balance. Call `POST /frontend/orders/{order_id}/approve`
5612
+ * (OTP-gated, keyed on the order id) to check the balance, debit the
5613
+ * source funds and execute the swap — the order lands in `COMPLETE`
5614
+ * synchronously — or `POST /frontend/orders/{order_id}/cancel` to
5615
+ * discard the order.
5616
+ *
5617
+ * Caller must be `admin` of the wallet.
5618
+ *
5619
+ */
5616
5620
  post: {
5617
5621
  parameters: {
5618
5622
  query?: never;
@@ -5622,11 +5626,11 @@ export interface paths {
5622
5626
  };
5623
5627
  requestBody: {
5624
5628
  content: {
5625
- "application/json": components["schemas"]["FrontendL2FOrderRequest"];
5629
+ "application/json": components["schemas"]["FrontendExchangeOrderRequest"];
5626
5630
  };
5627
5631
  };
5628
5632
  responses: {
5629
- /** @description SEPA withdrawal created */
5633
+ /** @description Exchange order created (status NEW — approve to debit and execute) */
5630
5634
  200: {
5631
5635
  headers: {
5632
5636
  [name: string]: unknown;
@@ -5639,7 +5643,7 @@ export interface paths {
5639
5643
  };
5640
5644
  };
5641
5645
  };
5642
- /** @description Validation error */
5646
+ /** @description Validation error (insufficient balance, virtual account missing, etc.) */
5643
5647
  400: {
5644
5648
  headers: {
5645
5649
  [name: string]: unknown;
@@ -5657,7 +5661,7 @@ export interface paths {
5657
5661
  "application/json": components["schemas"]["ErrorResponse"];
5658
5662
  };
5659
5663
  };
5660
- /** @description Caller is not an admin of the source wallet */
5664
+ /** @description Caller is not an admin of the wallet */
5661
5665
  403: {
5662
5666
  headers: {
5663
5667
  [name: string]: unknown;
@@ -5683,7 +5687,7 @@ export interface paths {
5683
5687
  patch?: never;
5684
5688
  trace?: never;
5685
5689
  };
5686
- "/frontend/orders/withdrawal/swift": {
5690
+ "/frontend/orders/withdrawal/internal": {
5687
5691
  parameters: {
5688
5692
  query?: never;
5689
5693
  header?: never;
@@ -5692,7 +5696,17 @@ export interface paths {
5692
5696
  };
5693
5697
  get?: never;
5694
5698
  put?: never;
5695
- /** SWIFT */
5699
+ /**
5700
+ * Internal
5701
+ * @description Transfers funds between two wallets within the platform. Two-phase:
5702
+ * the order is created in `NEW` status without touching the balance;
5703
+ * `POST /frontend/orders/{id}/approve` (OTP-gated, keyed on the order
5704
+ * id) checks the balance, debits the sender and executes the transfer
5705
+ * synchronously — receiver credited, order `COMPLETE`. A `NEW` order
5706
+ * can simply be canceled (no funds are held).
5707
+ * Caller must be `admin` of the source wallet.
5708
+ *
5709
+ */
5696
5710
  post: {
5697
5711
  parameters: {
5698
5712
  query?: never;
@@ -5702,11 +5716,32 @@ export interface paths {
5702
5716
  };
5703
5717
  requestBody: {
5704
5718
  content: {
5705
- "application/json": components["schemas"]["FrontendL2FOrderRequest"];
5719
+ "application/json": {
5720
+ /**
5721
+ * Format: uuid
5722
+ * @description Source wallet UUID
5723
+ */
5724
+ wallet_id: string;
5725
+ /** Format: uuid */
5726
+ from_currency_id: string;
5727
+ /**
5728
+ * Format: uuid
5729
+ * @description Counterparty destination of type INTERNAL (points at the receiver wallet).
5730
+ */
5731
+ counterparty_destination_id: string;
5732
+ amount: number;
5733
+ /**
5734
+ * Format: date-time
5735
+ * @description Optional. Schedule the transfer for a future time (min 1 hour, max 90 days ahead). No funds are reserved; after approval the order waits in EXPECTED status and executes automatically.
5736
+ */
5737
+ scheduled_at?: string;
5738
+ /** @description Optional supporting documents persisted with the order. */
5739
+ documents?: components["schemas"]["OrderDocumentInput"][];
5740
+ };
5706
5741
  };
5707
5742
  };
5708
5743
  responses: {
5709
- /** @description SWIFT withdrawal created */
5744
+ /** @description Transfer created in NEW status (awaiting approve; no funds held) */
5710
5745
  200: {
5711
5746
  headers: {
5712
5747
  [name: string]: unknown;
@@ -5763,7 +5798,7 @@ export interface paths {
5763
5798
  patch?: never;
5764
5799
  trace?: never;
5765
5800
  };
5766
- "/frontend/orders/withdrawal/chaps": {
5801
+ "/frontend/orders/withdrawal/crypto": {
5767
5802
  parameters: {
5768
5803
  query?: never;
5769
5804
  header?: never;
@@ -5772,7 +5807,18 @@ export interface paths {
5772
5807
  };
5773
5808
  get?: never;
5774
5809
  put?: never;
5775
- /** CHAPS */
5810
+ /**
5811
+ * Crypto
5812
+ * @description Sends crypto from an omnibus wallet to an external address. Two-phase:
5813
+ * the order is created in `NEW` status without touching the balance;
5814
+ * `POST /frontend/orders/{id}/approve` (OTP-gated, keyed on the order
5815
+ * id) checks the balance, debits the funds and dispatches the on-chain
5816
+ * send. If the destination address belongs to a wallet in the same
5817
+ * tenant, the order is created as `OMNIBUS_INTERNAL_TRANSFER` (no
5818
+ * on-chain transaction) — still `NEW` at create, debited + settled
5819
+ * synchronously to `COMPLETE` at approve.
5820
+ *
5821
+ */
5776
5822
  post: {
5777
5823
  parameters: {
5778
5824
  query?: never;
@@ -5782,11 +5828,11 @@ export interface paths {
5782
5828
  };
5783
5829
  requestBody: {
5784
5830
  content: {
5785
- "application/json": components["schemas"]["FrontendL2FOrderRequest"];
5831
+ "application/json": components["schemas"]["FrontendCryptoTransferRequest"];
5786
5832
  };
5787
5833
  };
5788
5834
  responses: {
5789
- /** @description CHAPS withdrawal created */
5835
+ /** @description Crypto withdrawal created */
5790
5836
  200: {
5791
5837
  headers: {
5792
5838
  [name: string]: unknown;
@@ -5843,7 +5889,7 @@ export interface paths {
5843
5889
  patch?: never;
5844
5890
  trace?: never;
5845
5891
  };
5846
- "/frontend/orders/withdrawal/fps": {
5892
+ "/frontend/orders/withdrawal/wire": {
5847
5893
  parameters: {
5848
5894
  query?: never;
5849
5895
  header?: never;
@@ -5852,7 +5898,7 @@ export interface paths {
5852
5898
  };
5853
5899
  get?: never;
5854
5900
  put?: never;
5855
- /** FPS */
5901
+ /** Wire */
5856
5902
  post: {
5857
5903
  parameters: {
5858
5904
  query?: never;
@@ -5866,7 +5912,7 @@ export interface paths {
5866
5912
  };
5867
5913
  };
5868
5914
  responses: {
5869
- /** @description FPS withdrawal created */
5915
+ /** @description Wire withdrawal created */
5870
5916
  200: {
5871
5917
  headers: {
5872
5918
  [name: string]: unknown;
@@ -5923,7 +5969,7 @@ export interface paths {
5923
5969
  patch?: never;
5924
5970
  trace?: never;
5925
5971
  };
5926
- "/frontend/orders/withdrawal/card": {
5972
+ "/frontend/orders/withdrawal/ach": {
5927
5973
  parameters: {
5928
5974
  query?: never;
5929
5975
  header?: never;
@@ -5932,10 +5978,7 @@ export interface paths {
5932
5978
  };
5933
5979
  get?: never;
5934
5980
  put?: never;
5935
- /**
5936
- * Card
5937
- * @description Funds a card sub-account from a wallet.
5938
- */
5981
+ /** ACH */
5939
5982
  post: {
5940
5983
  parameters: {
5941
5984
  query?: never;
@@ -5945,32 +5988,11 @@ export interface paths {
5945
5988
  };
5946
5989
  requestBody: {
5947
5990
  content: {
5948
- "application/json": {
5949
- /** Format: uuid */
5950
- wallet_id: string;
5951
- amount: number;
5952
- /**
5953
- * Format: uuid
5954
- * @description Source currency UUID
5955
- */
5956
- from_uuid: string;
5957
- /** Format: uuid */
5958
- sub_account_id: string;
5959
- /**
5960
- * Format: uuid
5961
- * @description Optional specific card ID
5962
- */
5963
- card_id?: string;
5964
- /** @description Idempotency key */
5965
- reference_id?: string;
5966
- note?: string;
5967
- /** @description Optional supporting documents persisted with the order. */
5968
- documents?: components["schemas"]["OrderDocumentInput"][];
5969
- };
5991
+ "application/json": components["schemas"]["FrontendL2FOrderRequest"];
5970
5992
  };
5971
5993
  };
5972
5994
  responses: {
5973
- /** @description Card topup order created */
5995
+ /** @description ACH withdrawal created */
5974
5996
  200: {
5975
5997
  headers: {
5976
5998
  [name: string]: unknown;
@@ -5980,12 +6002,10 @@ export interface paths {
5980
6002
  /** @example true */
5981
6003
  success?: boolean;
5982
6004
  data?: components["schemas"]["Order"];
5983
- /** @example Card topup order created */
5984
- message?: string;
5985
6005
  };
5986
6006
  };
5987
6007
  };
5988
- /** @description Missing required fields or invalid amount */
6008
+ /** @description Validation error */
5989
6009
  400: {
5990
6010
  headers: {
5991
6011
  [name: string]: unknown;
@@ -6012,8 +6032,8 @@ export interface paths {
6012
6032
  "application/json": components["schemas"]["ErrorResponse"];
6013
6033
  };
6014
6034
  };
6015
- /** @description Card topup failed */
6016
- 500: {
6035
+ /** @description Rate limit exceeded */
6036
+ 429: {
6017
6037
  headers: {
6018
6038
  [name: string]: unknown;
6019
6039
  };
@@ -6029,7 +6049,7 @@ export interface paths {
6029
6049
  patch?: never;
6030
6050
  trace?: never;
6031
6051
  };
6032
- "/frontend/orders/{order_id}/approve": {
6052
+ "/frontend/orders/withdrawal/sepa": {
6033
6053
  parameters: {
6034
6054
  query?: never;
6035
6055
  header?: never;
@@ -6038,36 +6058,21 @@ export interface paths {
6038
6058
  };
6039
6059
  get?: never;
6040
6060
  put?: never;
6041
- /**
6042
- * Approve an order
6043
- * @description Moves a NEW order to PROCESSING: checks the balance, debits the funds
6044
- * (transaction written as `complete`) and triggers its workflow.
6045
- * Exchange orders (EXCHANGE_OMNI) and internal transfers
6046
- * (TRANSFER_INTERNAL / OMNIBUS_INTERNAL_TRANSFER) settle synchronously
6047
- * and land in COMPLETE. An insufficient balance fails the order
6048
- * (FAILED). OTP verification is mandatory and keyed on the order id
6049
- * (request the OTP for the order being approved).
6050
- *
6051
- */
6061
+ /** SEPA */
6052
6062
  post: {
6053
6063
  parameters: {
6054
6064
  query?: never;
6055
6065
  header?: never;
6056
- path: {
6057
- order_id: string;
6058
- };
6066
+ path?: never;
6059
6067
  cookie?: never;
6060
6068
  };
6061
6069
  requestBody: {
6062
6070
  content: {
6063
- "application/json": {
6064
- /** Format: uuid */
6065
- wallet_id: string;
6066
- };
6071
+ "application/json": components["schemas"]["FrontendL2FOrderRequest"];
6067
6072
  };
6068
6073
  };
6069
6074
  responses: {
6070
- /** @description Order moved to PROCESSING */
6075
+ /** @description SEPA withdrawal created */
6071
6076
  200: {
6072
6077
  headers: {
6073
6078
  [name: string]: unknown;
@@ -6080,8 +6085,35 @@ export interface paths {
6080
6085
  };
6081
6086
  };
6082
6087
  };
6083
- /** @description Order is not in an approvable state */
6084
- 409: {
6088
+ /** @description Validation error */
6089
+ 400: {
6090
+ headers: {
6091
+ [name: string]: unknown;
6092
+ };
6093
+ content: {
6094
+ "application/json": components["schemas"]["ErrorResponse"];
6095
+ };
6096
+ };
6097
+ /** @description Authentication required */
6098
+ 401: {
6099
+ headers: {
6100
+ [name: string]: unknown;
6101
+ };
6102
+ content: {
6103
+ "application/json": components["schemas"]["ErrorResponse"];
6104
+ };
6105
+ };
6106
+ /** @description Caller is not an admin of the source wallet */
6107
+ 403: {
6108
+ headers: {
6109
+ [name: string]: unknown;
6110
+ };
6111
+ content: {
6112
+ "application/json": components["schemas"]["ErrorResponse"];
6113
+ };
6114
+ };
6115
+ /** @description Rate limit exceeded */
6116
+ 429: {
6085
6117
  headers: {
6086
6118
  [name: string]: unknown;
6087
6119
  };
@@ -6097,7 +6129,7 @@ export interface paths {
6097
6129
  patch?: never;
6098
6130
  trace?: never;
6099
6131
  };
6100
- "/frontend/orders/{order_id}/cancel": {
6132
+ "/frontend/orders/withdrawal/swift": {
6101
6133
  parameters: {
6102
6134
  query?: never;
6103
6135
  header?: never;
@@ -6106,30 +6138,21 @@ export interface paths {
6106
6138
  };
6107
6139
  get?: never;
6108
6140
  put?: never;
6109
- /**
6110
- * Cancel an order
6111
- * @description Cancels a NEW/FAILED order, cancels its workflow run, and refunds the debited funds (if the order was ever approved).
6112
- */
6141
+ /** SWIFT */
6113
6142
  post: {
6114
6143
  parameters: {
6115
6144
  query?: never;
6116
6145
  header?: never;
6117
- path: {
6118
- order_id: string;
6119
- };
6146
+ path?: never;
6120
6147
  cookie?: never;
6121
6148
  };
6122
6149
  requestBody: {
6123
6150
  content: {
6124
- "application/json": {
6125
- /** Format: uuid */
6126
- wallet_id: string;
6127
- reason?: string;
6128
- };
6151
+ "application/json": components["schemas"]["FrontendL2FOrderRequest"];
6129
6152
  };
6130
6153
  };
6131
6154
  responses: {
6132
- /** @description Order canceled (debited funds refunded when applicable) */
6155
+ /** @description SWIFT withdrawal created */
6133
6156
  200: {
6134
6157
  headers: {
6135
6158
  [name: string]: unknown;
@@ -6142,8 +6165,35 @@ export interface paths {
6142
6165
  };
6143
6166
  };
6144
6167
  };
6145
- /** @description Order is not in a cancelable state */
6146
- 409: {
6168
+ /** @description Validation error */
6169
+ 400: {
6170
+ headers: {
6171
+ [name: string]: unknown;
6172
+ };
6173
+ content: {
6174
+ "application/json": components["schemas"]["ErrorResponse"];
6175
+ };
6176
+ };
6177
+ /** @description Authentication required */
6178
+ 401: {
6179
+ headers: {
6180
+ [name: string]: unknown;
6181
+ };
6182
+ content: {
6183
+ "application/json": components["schemas"]["ErrorResponse"];
6184
+ };
6185
+ };
6186
+ /** @description Caller is not an admin of the source wallet */
6187
+ 403: {
6188
+ headers: {
6189
+ [name: string]: unknown;
6190
+ };
6191
+ content: {
6192
+ "application/json": components["schemas"]["ErrorResponse"];
6193
+ };
6194
+ };
6195
+ /** @description Rate limit exceeded */
6196
+ 429: {
6147
6197
  headers: {
6148
6198
  [name: string]: unknown;
6149
6199
  };
@@ -6159,7 +6209,7 @@ export interface paths {
6159
6209
  patch?: never;
6160
6210
  trace?: never;
6161
6211
  };
6162
- "/frontend/orders/{order_id}/comment": {
6212
+ "/frontend/orders/withdrawal/chaps": {
6163
6213
  parameters: {
6164
6214
  query?: never;
6165
6215
  header?: never;
@@ -6167,39 +6217,22 @@ export interface paths {
6167
6217
  cookie?: never;
6168
6218
  };
6169
6219
  get?: never;
6170
- /**
6171
- * Set or clear an order's comment
6172
- * @description Saves (or edits) a single free-text comment attached to an order
6173
- * (incoming or outgoing). Useful for noting who an incoming crypto deposit
6174
- * came from. Send `comment: null` or an empty string to clear it.
6175
- *
6176
- * The response includes the saved `comment` plus audit metadata
6177
- * (`comment_updated_by` = editor's user_data uuid, `comment_updated_at`).
6178
- *
6179
- * **Access Control**: caller must be `admin` or `owner` of the order's wallet.
6180
- *
6181
- */
6182
- put: {
6220
+ put?: never;
6221
+ /** CHAPS */
6222
+ post: {
6183
6223
  parameters: {
6184
6224
  query?: never;
6185
6225
  header?: never;
6186
- path: {
6187
- order_id: string;
6188
- };
6226
+ path?: never;
6189
6227
  cookie?: never;
6190
6228
  };
6191
6229
  requestBody: {
6192
6230
  content: {
6193
- "application/json": {
6194
- /** Format: uuid */
6195
- wallet_id: string;
6196
- /** @description Comment text. `null` or empty clears the comment. */
6197
- comment?: string | null;
6198
- };
6231
+ "application/json": components["schemas"]["FrontendL2FOrderRequest"];
6199
6232
  };
6200
6233
  };
6201
6234
  responses: {
6202
- /** @description Comment saved */
6235
+ /** @description CHAPS withdrawal created */
6203
6236
  200: {
6204
6237
  headers: {
6205
6238
  [name: string]: unknown;
@@ -6212,7 +6245,7 @@ export interface paths {
6212
6245
  };
6213
6246
  };
6214
6247
  };
6215
- /** @description Validation error (e.g. comment too long) */
6248
+ /** @description Validation error */
6216
6249
  400: {
6217
6250
  headers: {
6218
6251
  [name: string]: unknown;
@@ -6221,7 +6254,16 @@ export interface paths {
6221
6254
  "application/json": components["schemas"]["ErrorResponse"];
6222
6255
  };
6223
6256
  };
6224
- /** @description Access denied (insufficient wallet role / wrong wallet) */
6257
+ /** @description Authentication required */
6258
+ 401: {
6259
+ headers: {
6260
+ [name: string]: unknown;
6261
+ };
6262
+ content: {
6263
+ "application/json": components["schemas"]["ErrorResponse"];
6264
+ };
6265
+ };
6266
+ /** @description Caller is not an admin of the source wallet */
6225
6267
  403: {
6226
6268
  headers: {
6227
6269
  [name: string]: unknown;
@@ -6230,8 +6272,8 @@ export interface paths {
6230
6272
  "application/json": components["schemas"]["ErrorResponse"];
6231
6273
  };
6232
6274
  };
6233
- /** @description Order not found */
6234
- 404: {
6275
+ /** @description Rate limit exceeded */
6276
+ 429: {
6235
6277
  headers: {
6236
6278
  [name: string]: unknown;
6237
6279
  };
@@ -6241,138 +6283,200 @@ export interface paths {
6241
6283
  };
6242
6284
  };
6243
6285
  };
6244
- post?: never;
6245
6286
  delete?: never;
6246
6287
  options?: never;
6247
6288
  head?: never;
6248
6289
  patch?: never;
6249
6290
  trace?: never;
6250
6291
  };
6251
- "/frontend/orders/types": {
6292
+ "/frontend/orders/withdrawal/fps": {
6252
6293
  parameters: {
6253
6294
  query?: never;
6254
6295
  header?: never;
6255
6296
  path?: never;
6256
6297
  cookie?: never;
6257
6298
  };
6258
- /**
6259
- * List order types
6260
- * @description Retrieves a list of available order types for the tenant.
6261
- *
6262
- * **Authentication**: Bearer token with x-tenant-id header required
6263
- *
6264
- */
6265
- get: {
6299
+ get?: never;
6300
+ put?: never;
6301
+ /** FPS */
6302
+ post: {
6266
6303
  parameters: {
6267
6304
  query?: never;
6268
6305
  header?: never;
6269
6306
  path?: never;
6270
6307
  cookie?: never;
6271
6308
  };
6272
- requestBody?: never;
6309
+ requestBody: {
6310
+ content: {
6311
+ "application/json": components["schemas"]["FrontendL2FOrderRequest"];
6312
+ };
6313
+ };
6273
6314
  responses: {
6274
- /** @description List of available order types */
6315
+ /** @description FPS withdrawal created */
6275
6316
  200: {
6276
6317
  headers: {
6277
6318
  [name: string]: unknown;
6278
6319
  };
6279
- content?: never;
6320
+ content: {
6321
+ "application/json": {
6322
+ /** @example true */
6323
+ success?: boolean;
6324
+ data?: components["schemas"]["Order"];
6325
+ };
6326
+ };
6327
+ };
6328
+ /** @description Validation error */
6329
+ 400: {
6330
+ headers: {
6331
+ [name: string]: unknown;
6332
+ };
6333
+ content: {
6334
+ "application/json": components["schemas"]["ErrorResponse"];
6335
+ };
6336
+ };
6337
+ /** @description Authentication required */
6338
+ 401: {
6339
+ headers: {
6340
+ [name: string]: unknown;
6341
+ };
6342
+ content: {
6343
+ "application/json": components["schemas"]["ErrorResponse"];
6344
+ };
6345
+ };
6346
+ /** @description Caller is not an admin of the source wallet */
6347
+ 403: {
6348
+ headers: {
6349
+ [name: string]: unknown;
6350
+ };
6351
+ content: {
6352
+ "application/json": components["schemas"]["ErrorResponse"];
6353
+ };
6354
+ };
6355
+ /** @description Rate limit exceeded */
6356
+ 429: {
6357
+ headers: {
6358
+ [name: string]: unknown;
6359
+ };
6360
+ content: {
6361
+ "application/json": components["schemas"]["ErrorResponse"];
6362
+ };
6280
6363
  };
6281
6364
  };
6282
6365
  };
6283
- put?: never;
6284
- post?: never;
6285
6366
  delete?: never;
6286
6367
  options?: never;
6287
6368
  head?: never;
6288
6369
  patch?: never;
6289
6370
  trace?: never;
6290
6371
  };
6291
- "/frontend/orders/types/{id}": {
6372
+ "/frontend/orders/{order_id}/approve": {
6292
6373
  parameters: {
6293
6374
  query?: never;
6294
6375
  header?: never;
6295
6376
  path?: never;
6296
6377
  cookie?: never;
6297
6378
  };
6379
+ get?: never;
6380
+ put?: never;
6298
6381
  /**
6299
- * Get order type
6300
- * @description Retrieves details of a specific order type by ID.
6301
- *
6302
- * **Authentication**: Bearer token with x-tenant-id header required
6382
+ * Approve an order
6383
+ * @description Moves a NEW order to PROCESSING: checks the balance, debits the funds
6384
+ * (transaction written as `complete`) and triggers its workflow.
6385
+ * Exchange orders (EXCHANGE_OMNI) and internal transfers
6386
+ * (TRANSFER_INTERNAL / OMNIBUS_INTERNAL_TRANSFER) settle synchronously
6387
+ * and land in COMPLETE. An insufficient balance fails the order
6388
+ * (FAILED). OTP verification is mandatory and keyed on the order id
6389
+ * (request the OTP for the order being approved). Orders created with
6390
+ * `scheduled_at` move to EXPECTED instead — no funds are debited until
6391
+ * execution at the requested time.
6303
6392
  *
6304
6393
  */
6305
- get: {
6394
+ post: {
6306
6395
  parameters: {
6307
6396
  query?: never;
6308
6397
  header?: never;
6309
6398
  path: {
6310
- id: string;
6399
+ order_id: string;
6311
6400
  };
6312
6401
  cookie?: never;
6313
6402
  };
6314
- requestBody?: never;
6403
+ requestBody: {
6404
+ content: {
6405
+ "application/json": {
6406
+ /** Format: uuid */
6407
+ wallet_id: string;
6408
+ };
6409
+ };
6410
+ };
6315
6411
  responses: {
6316
- /** @description Order type details */
6412
+ /** @description Order moved to PROCESSING */
6317
6413
  200: {
6318
6414
  headers: {
6319
6415
  [name: string]: unknown;
6320
6416
  };
6321
- content?: never;
6417
+ content: {
6418
+ "application/json": {
6419
+ /** @example true */
6420
+ success?: boolean;
6421
+ data?: components["schemas"]["Order"];
6422
+ };
6423
+ };
6322
6424
  };
6323
- /** @description Order type not found */
6324
- 404: {
6425
+ /** @description Order is not in an approvable state */
6426
+ 409: {
6325
6427
  headers: {
6326
6428
  [name: string]: unknown;
6327
6429
  };
6328
- content?: never;
6430
+ content: {
6431
+ "application/json": components["schemas"]["ErrorResponse"];
6432
+ };
6329
6433
  };
6330
6434
  };
6331
6435
  };
6332
- put?: never;
6333
- post?: never;
6334
6436
  delete?: never;
6335
6437
  options?: never;
6336
6438
  head?: never;
6337
6439
  patch?: never;
6338
6440
  trace?: never;
6339
6441
  };
6340
- "/frontend/orders/calc": {
6442
+ "/frontend/orders/{order_id}/cancel": {
6341
6443
  parameters: {
6342
6444
  query?: never;
6343
6445
  header?: never;
6344
6446
  path?: never;
6345
6447
  cookie?: never;
6346
6448
  };
6449
+ get?: never;
6450
+ put?: never;
6347
6451
  /**
6348
- * Calculate order
6349
- * @description Pre-calculates order amounts, fees and exchange rates without creating an order.
6350
- *
6351
- * **Authentication**: Bearer token with x-tenant-id header required
6452
+ * Cancel an order
6453
+ * @description Cancels a NEW or EXPECTED order and cancels its workflow run. Neither
6454
+ * status holds debited funds, so cancel never moves money.
6455
+ * BREAKING CHANGE (2026-07-26): FAILED is no longer cancelable and returns
6456
+ * 409. Paying back an order that was debited and then failed is now a
6457
+ * separate, admin-panel-only refund action.
6352
6458
  *
6353
6459
  */
6354
- get: {
6460
+ post: {
6355
6461
  parameters: {
6356
- query: {
6357
- order_type: components["schemas"]["OrderTypeId"];
6358
- amount: number;
6359
- from_currency_id: string;
6360
- to_currency_id: string;
6361
- /** @description If `true`, calculates inputs needed to receive the given amount. */
6362
- is_reverse: boolean;
6363
- /** @description If `true`, the network fee is subtracted from `result_amount`. If `false`, the fee is added on top of `from_amount` and the recipient gets the full converted amount. Ignored for reverse calculations. Required so the client always states the fee-allocation mode explicitly — a change of the server-side fallback can never silently alter the calculation.
6364
- * */
6365
- is_subtract: boolean;
6366
- /** @description Destination address (for crypto withdrawals; affects network fee estimation). */
6367
- to_address?: string;
6368
- };
6462
+ query?: never;
6369
6463
  header?: never;
6370
- path?: never;
6464
+ path: {
6465
+ order_id: string;
6466
+ };
6371
6467
  cookie?: never;
6372
6468
  };
6373
- requestBody?: never;
6469
+ requestBody: {
6470
+ content: {
6471
+ "application/json": {
6472
+ /** Format: uuid */
6473
+ wallet_id: string;
6474
+ reason?: string;
6475
+ };
6476
+ };
6477
+ };
6374
6478
  responses: {
6375
- /** @description Calculated order details */
6479
+ /** @description Order canceled (no balance change) */
6376
6480
  200: {
6377
6481
  headers: {
6378
6482
  [name: string]: unknown;
@@ -6380,22 +6484,13 @@ export interface paths {
6380
6484
  content: {
6381
6485
  "application/json": {
6382
6486
  /** @example true */
6383
- success: boolean;
6384
- data: components["schemas"]["OrderCalculation"];
6487
+ success?: boolean;
6488
+ data?: components["schemas"]["Order"];
6385
6489
  };
6386
6490
  };
6387
6491
  };
6388
- /** @description Invalid request (e.g. unknown `order_type`, missing required parameter, exchange rate not found) */
6389
- 400: {
6390
- headers: {
6391
- [name: string]: unknown;
6392
- };
6393
- content: {
6394
- "application/json": components["schemas"]["ErrorResponse"];
6395
- };
6396
- };
6397
- /** @description Calculation failed (e.g. network fee estimation error) */
6398
- 500: {
6492
+ /** @description Order is not in a cancelable state */
6493
+ 409: {
6399
6494
  headers: {
6400
6495
  [name: string]: unknown;
6401
6496
  };
@@ -6405,53 +6500,53 @@ export interface paths {
6405
6500
  };
6406
6501
  };
6407
6502
  };
6408
- put?: never;
6409
- post?: never;
6410
6503
  delete?: never;
6411
6504
  options?: never;
6412
6505
  head?: never;
6413
6506
  patch?: never;
6414
6507
  trace?: never;
6415
6508
  };
6416
- "/frontend/orders/wallet/{wallet_uuid}": {
6509
+ "/frontend/orders/{order_id}/comment": {
6417
6510
  parameters: {
6418
6511
  query?: never;
6419
6512
  header?: never;
6420
6513
  path?: never;
6421
6514
  cookie?: never;
6422
6515
  };
6516
+ get?: never;
6423
6517
  /**
6424
- * List orders
6425
- * @description Retrieves a paginated list of orders for a specific wallet.
6518
+ * Set or clear an order's comment
6519
+ * @description Saves (or edits) a single free-text comment attached to an order
6520
+ * (incoming or outgoing). Useful for noting who an incoming crypto deposit
6521
+ * came from. Send `comment: null` or an empty string to clear it.
6426
6522
  *
6427
- * **Authentication**: Bearer token with x-tenant-id header required
6523
+ * The response includes the saved `comment` plus audit metadata
6524
+ * (`comment_updated_by` = editor's user_data uuid, `comment_updated_at`).
6428
6525
  *
6429
- * **Access Control**: User must have access to the wallet
6526
+ * **Access Control**: caller must be `admin` or `owner` of the order's wallet.
6430
6527
  *
6431
6528
  */
6432
- get: {
6529
+ put: {
6433
6530
  parameters: {
6434
- query?: {
6435
- offset?: number;
6436
- limit?: number;
6437
- sort_by?: string;
6438
- sort_order?: "asc" | "desc";
6439
- /** @description JSON-encoded filters */
6440
- filters?: string;
6441
- date_from?: string;
6442
- date_to?: string;
6443
- /** @description If `true`, includes dust orders (amount below render threshold for either currency). Defaults to `false` — dust orders are hidden. */
6444
- show_low_balance?: "true" | "false";
6445
- };
6531
+ query?: never;
6446
6532
  header?: never;
6447
6533
  path: {
6448
- wallet_uuid: string;
6534
+ order_id: string;
6449
6535
  };
6450
6536
  cookie?: never;
6451
6537
  };
6452
- requestBody?: never;
6538
+ requestBody: {
6539
+ content: {
6540
+ "application/json": {
6541
+ /** Format: uuid */
6542
+ wallet_id: string;
6543
+ /** @description Comment text. `null` or empty clears the comment. */
6544
+ comment?: string | null;
6545
+ };
6546
+ };
6547
+ };
6453
6548
  responses: {
6454
- /** @description List of orders */
6549
+ /** @description Comment saved */
6455
6550
  200: {
6456
6551
  headers: {
6457
6552
  [name: string]: unknown;
@@ -6459,22 +6554,40 @@ export interface paths {
6459
6554
  content: {
6460
6555
  "application/json": {
6461
6556
  /** @example true */
6462
- success: boolean;
6463
- data: components["schemas"]["Order"][];
6464
- pagination: components["schemas"]["PaginationResponse"];
6557
+ success?: boolean;
6558
+ data?: components["schemas"]["Order"];
6465
6559
  };
6466
6560
  };
6467
6561
  };
6468
- /** @description Access denied to wallet */
6562
+ /** @description Validation error (e.g. comment too long) */
6563
+ 400: {
6564
+ headers: {
6565
+ [name: string]: unknown;
6566
+ };
6567
+ content: {
6568
+ "application/json": components["schemas"]["ErrorResponse"];
6569
+ };
6570
+ };
6571
+ /** @description Access denied (insufficient wallet role / wrong wallet) */
6469
6572
  403: {
6470
6573
  headers: {
6471
6574
  [name: string]: unknown;
6472
6575
  };
6473
- content?: never;
6576
+ content: {
6577
+ "application/json": components["schemas"]["ErrorResponse"];
6578
+ };
6579
+ };
6580
+ /** @description Order not found */
6581
+ 404: {
6582
+ headers: {
6583
+ [name: string]: unknown;
6584
+ };
6585
+ content: {
6586
+ "application/json": components["schemas"]["ErrorResponse"];
6587
+ };
6474
6588
  };
6475
6589
  };
6476
6590
  };
6477
- put?: never;
6478
6591
  post?: never;
6479
6592
  delete?: never;
6480
6593
  options?: never;
@@ -6482,7 +6595,7 @@ export interface paths {
6482
6595
  patch?: never;
6483
6596
  trace?: never;
6484
6597
  };
6485
- "/frontend/orders/wallet/{wallet_uuid}/csv": {
6598
+ "/frontend/orders/types": {
6486
6599
  parameters: {
6487
6600
  query?: never;
6488
6601
  header?: never;
@@ -6490,43 +6603,23 @@ export interface paths {
6490
6603
  cookie?: never;
6491
6604
  };
6492
6605
  /**
6493
- * Export orders
6494
- * @description Exports orders for a specific wallet as a CSV file.
6606
+ * List order types
6607
+ * @description Retrieves a list of available order types for the tenant.
6495
6608
  *
6496
6609
  * **Authentication**: Bearer token with x-tenant-id header required
6497
6610
  *
6498
- * **Access Control**: User must have access to the wallet
6499
- *
6500
6611
  */
6501
6612
  get: {
6502
6613
  parameters: {
6503
- query?: {
6504
- date_from?: string;
6505
- date_to?: string;
6506
- /** @description JSON-encoded filters */
6507
- filters?: string;
6508
- /** @description If `true`, includes dust orders (amount below render threshold for either currency). Defaults to `false` — dust orders are hidden. */
6509
- show_low_balance?: "true" | "false";
6510
- };
6614
+ query?: never;
6511
6615
  header?: never;
6512
- path: {
6513
- wallet_uuid: string;
6514
- };
6616
+ path?: never;
6515
6617
  cookie?: never;
6516
6618
  };
6517
6619
  requestBody?: never;
6518
6620
  responses: {
6519
- /** @description CSV file download */
6621
+ /** @description List of available order types */
6520
6622
  200: {
6521
- headers: {
6522
- [name: string]: unknown;
6523
- };
6524
- content: {
6525
- "text/csv": string;
6526
- };
6527
- };
6528
- /** @description Access denied to wallet */
6529
- 403: {
6530
6623
  headers: {
6531
6624
  [name: string]: unknown;
6532
6625
  };
@@ -6542,7 +6635,7 @@ export interface paths {
6542
6635
  patch?: never;
6543
6636
  trace?: never;
6544
6637
  };
6545
- "/frontend/orders/id/{order_id}": {
6638
+ "/frontend/orders/types/{id}": {
6546
6639
  parameters: {
6547
6640
  query?: never;
6548
6641
  header?: never;
@@ -6550,8 +6643,8 @@ export interface paths {
6550
6643
  cookie?: never;
6551
6644
  };
6552
6645
  /**
6553
- * Get order
6554
- * @description Retrieves a specific order by its numeric ID.
6646
+ * Get order type
6647
+ * @description Retrieves details of a specific order type by ID.
6555
6648
  *
6556
6649
  * **Authentication**: Bearer token with x-tenant-id header required
6557
6650
  *
@@ -6561,26 +6654,20 @@ export interface paths {
6561
6654
  query?: never;
6562
6655
  header?: never;
6563
6656
  path: {
6564
- order_id: number;
6657
+ id: string;
6565
6658
  };
6566
6659
  cookie?: never;
6567
6660
  };
6568
6661
  requestBody?: never;
6569
6662
  responses: {
6570
- /** @description Order details */
6663
+ /** @description Order type details */
6571
6664
  200: {
6572
6665
  headers: {
6573
6666
  [name: string]: unknown;
6574
6667
  };
6575
- content: {
6576
- "application/json": {
6577
- /** @example true */
6578
- success: boolean;
6579
- data: components["schemas"]["OrderDetail"];
6580
- };
6581
- };
6668
+ content?: never;
6582
6669
  };
6583
- /** @description Order not found */
6670
+ /** @description Order type not found */
6584
6671
  404: {
6585
6672
  headers: {
6586
6673
  [name: string]: unknown;
@@ -6597,7 +6684,7 @@ export interface paths {
6597
6684
  patch?: never;
6598
6685
  trace?: never;
6599
6686
  };
6600
- "/frontend/orders/uuid/{order_uuid}": {
6687
+ "/frontend/orders/calc": {
6601
6688
  parameters: {
6602
6689
  query?: never;
6603
6690
  header?: never;
@@ -6605,24 +6692,34 @@ export interface paths {
6605
6692
  cookie?: never;
6606
6693
  };
6607
6694
  /**
6608
- * Get order by UUID
6609
- * @description Retrieves a specific order by its UUID.
6695
+ * Calculate order
6696
+ * @description Pre-calculates order amounts, fees and exchange rates without creating an order.
6610
6697
  *
6611
6698
  * **Authentication**: Bearer token with x-tenant-id header required
6612
6699
  *
6613
6700
  */
6614
6701
  get: {
6615
6702
  parameters: {
6616
- query?: never;
6617
- header?: never;
6618
- path: {
6619
- order_uuid: string;
6703
+ query: {
6704
+ order_type: components["schemas"]["OrderTypeId"];
6705
+ amount: number;
6706
+ from_currency_id: string;
6707
+ to_currency_id: string;
6708
+ /** @description If `true`, calculates inputs needed to receive the given amount. */
6709
+ is_reverse: boolean;
6710
+ /** @description If `true`, the network fee is subtracted from `result_amount`. If `false`, the fee is added on top of `from_amount` and the recipient gets the full converted amount. Ignored for reverse calculations. Required so the client always states the fee-allocation mode explicitly — a change of the server-side fallback can never silently alter the calculation.
6711
+ * */
6712
+ is_subtract: boolean;
6713
+ /** @description Destination address (for crypto withdrawals; affects network fee estimation). */
6714
+ to_address?: string;
6620
6715
  };
6716
+ header?: never;
6717
+ path?: never;
6621
6718
  cookie?: never;
6622
6719
  };
6623
6720
  requestBody?: never;
6624
6721
  responses: {
6625
- /** @description Order details */
6722
+ /** @description Calculated order details */
6626
6723
  200: {
6627
6724
  headers: {
6628
6725
  [name: string]: unknown;
@@ -6631,16 +6728,27 @@ export interface paths {
6631
6728
  "application/json": {
6632
6729
  /** @example true */
6633
6730
  success: boolean;
6634
- data: components["schemas"]["OrderDetail"];
6731
+ data: components["schemas"]["OrderCalculation"];
6635
6732
  };
6636
6733
  };
6637
6734
  };
6638
- /** @description Order not found */
6639
- 404: {
6735
+ /** @description Invalid request (e.g. unknown `order_type`, missing required parameter, exchange rate not found) */
6736
+ 400: {
6640
6737
  headers: {
6641
6738
  [name: string]: unknown;
6642
6739
  };
6643
- content?: never;
6740
+ content: {
6741
+ "application/json": components["schemas"]["ErrorResponse"];
6742
+ };
6743
+ };
6744
+ /** @description Calculation failed (e.g. network fee estimation error) */
6745
+ 500: {
6746
+ headers: {
6747
+ [name: string]: unknown;
6748
+ };
6749
+ content: {
6750
+ "application/json": components["schemas"]["ErrorResponse"];
6751
+ };
6644
6752
  };
6645
6753
  };
6646
6754
  };
@@ -6652,103 +6760,60 @@ export interface paths {
6652
6760
  patch?: never;
6653
6761
  trace?: never;
6654
6762
  };
6655
- "/frontend/orders/TRANSFER_INTERNAL": {
6763
+ "/frontend/orders/wallet/{wallet_uuid}": {
6656
6764
  parameters: {
6657
6765
  query?: never;
6658
6766
  header?: never;
6659
6767
  path?: never;
6660
6768
  cookie?: never;
6661
6769
  };
6662
- get?: never;
6663
- put?: never;
6664
6770
  /**
6665
- * Create internal transfer
6666
- * @description Creates an internal transfer between wallets.
6771
+ * List orders
6772
+ * @description Retrieves a paginated list of orders for a specific wallet.
6667
6773
  *
6668
6774
  * **Authentication**: Bearer token with x-tenant-id header required
6669
6775
  *
6670
- * **Access Control**: User must be admin of the source wallet
6776
+ * **Access Control**: User must have access to the wallet
6671
6777
  *
6672
6778
  */
6673
- post: {
6779
+ get: {
6674
6780
  parameters: {
6675
- query?: never;
6781
+ query?: {
6782
+ offset?: number;
6783
+ limit?: number;
6784
+ sort_by?: string;
6785
+ sort_order?: "asc" | "desc";
6786
+ /** @description JSON-encoded filters */
6787
+ filters?: string;
6788
+ date_from?: string;
6789
+ date_to?: string;
6790
+ /** @description If `true`, includes dust orders (amount below render threshold for either currency). Defaults to `false` — dust orders are hidden. */
6791
+ show_low_balance?: "true" | "false";
6792
+ };
6676
6793
  header?: never;
6677
- path?: never;
6678
- cookie?: never;
6679
- };
6680
- requestBody: {
6681
- content: {
6682
- "application/json": {
6683
- /** Format: uuid */
6684
- wallet_id: string;
6685
- /** Format: uuid */
6686
- from_currency_id: string;
6687
- /**
6688
- * Format: uuid
6689
- * @description Receiver — a counterparty destination of type INTERNAL (points at the target wallet)
6690
- */
6691
- counterparty_destination_id: string;
6692
- amount: number;
6693
- request_id: string;
6694
- };
6794
+ path: {
6795
+ wallet_uuid: string;
6695
6796
  };
6797
+ cookie?: never;
6696
6798
  };
6799
+ requestBody?: never;
6697
6800
  responses: {
6698
- /** @description Order created */
6801
+ /** @description List of orders */
6699
6802
  200: {
6700
6803
  headers: {
6701
6804
  [name: string]: unknown;
6702
6805
  };
6703
- content?: never;
6704
- };
6705
- /** @description Access denied */
6706
- 403: {
6707
- headers: {
6708
- [name: string]: unknown;
6709
- };
6710
- content?: never;
6711
- };
6712
- /** @description Rate limit exceeded */
6713
- 429: {
6714
- headers: {
6715
- [name: string]: unknown;
6716
- };
6717
- content?: never;
6718
- };
6719
- };
6720
- };
6721
- delete?: never;
6722
- options?: never;
6723
- head?: never;
6724
- patch?: never;
6725
- trace?: never;
6726
- };
6727
- "/frontend/orders/OMNIBUS_CRYPTO_TRANSFER": {
6728
- parameters: {
6729
- query?: never;
6730
- header?: never;
6731
- path?: never;
6732
- cookie?: never;
6733
- };
6734
- get?: never;
6735
- put?: never;
6736
- /** Create omnibus crypto transfer */
6737
- post: {
6738
- parameters: {
6739
- query?: never;
6740
- header?: never;
6741
- path?: never;
6742
- cookie?: never;
6743
- };
6744
- requestBody: {
6745
- content: {
6746
- "application/json": components["schemas"]["FrontendCryptoTransferRequest"];
6806
+ content: {
6807
+ "application/json": {
6808
+ /** @example true */
6809
+ success: boolean;
6810
+ data: components["schemas"]["Order"][];
6811
+ pagination: components["schemas"]["PaginationResponse"];
6812
+ };
6813
+ };
6747
6814
  };
6748
- };
6749
- responses: {
6750
- /** @description Order created */
6751
- 200: {
6815
+ /** @description Access denied to wallet */
6816
+ 403: {
6752
6817
  headers: {
6753
6818
  [name: string]: unknown;
6754
6819
  };
@@ -6756,37 +6821,59 @@ export interface paths {
6756
6821
  };
6757
6822
  };
6758
6823
  };
6824
+ put?: never;
6825
+ post?: never;
6759
6826
  delete?: never;
6760
6827
  options?: never;
6761
6828
  head?: never;
6762
6829
  patch?: never;
6763
6830
  trace?: never;
6764
6831
  };
6765
- "/frontend/orders/SEGREGATED_CRYPTO_TRANSFER": {
6832
+ "/frontend/orders/wallet/{wallet_uuid}/csv": {
6766
6833
  parameters: {
6767
6834
  query?: never;
6768
6835
  header?: never;
6769
6836
  path?: never;
6770
6837
  cookie?: never;
6771
6838
  };
6772
- get?: never;
6773
- put?: never;
6774
- /** Create segregated crypto transfer */
6775
- post: {
6839
+ /**
6840
+ * Export orders
6841
+ * @description Exports orders for a specific wallet as a CSV file.
6842
+ *
6843
+ * **Authentication**: Bearer token with x-tenant-id header required
6844
+ *
6845
+ * **Access Control**: User must have access to the wallet
6846
+ *
6847
+ */
6848
+ get: {
6776
6849
  parameters: {
6777
- query?: never;
6850
+ query?: {
6851
+ date_from?: string;
6852
+ date_to?: string;
6853
+ /** @description JSON-encoded filters */
6854
+ filters?: string;
6855
+ /** @description If `true`, includes dust orders (amount below render threshold for either currency). Defaults to `false` — dust orders are hidden. */
6856
+ show_low_balance?: "true" | "false";
6857
+ };
6778
6858
  header?: never;
6779
- path?: never;
6780
- cookie?: never;
6781
- };
6782
- requestBody: {
6783
- content: {
6784
- "application/json": components["schemas"]["FrontendCryptoTransferRequest"];
6859
+ path: {
6860
+ wallet_uuid: string;
6785
6861
  };
6862
+ cookie?: never;
6786
6863
  };
6864
+ requestBody?: never;
6787
6865
  responses: {
6788
- /** @description Order created */
6866
+ /** @description CSV file download */
6789
6867
  200: {
6868
+ headers: {
6869
+ [name: string]: unknown;
6870
+ };
6871
+ content: {
6872
+ "text/csv": string;
6873
+ };
6874
+ };
6875
+ /** @description Access denied to wallet */
6876
+ 403: {
6790
6877
  headers: {
6791
6878
  [name: string]: unknown;
6792
6879
  };
@@ -6794,37 +6881,54 @@ export interface paths {
6794
6881
  };
6795
6882
  };
6796
6883
  };
6884
+ put?: never;
6885
+ post?: never;
6797
6886
  delete?: never;
6798
6887
  options?: never;
6799
6888
  head?: never;
6800
6889
  patch?: never;
6801
6890
  trace?: never;
6802
6891
  };
6803
- "/frontend/orders/L2F_WIRE_OFFRAMP": {
6892
+ "/frontend/orders/id/{order_id}": {
6804
6893
  parameters: {
6805
6894
  query?: never;
6806
6895
  header?: never;
6807
6896
  path?: never;
6808
6897
  cookie?: never;
6809
6898
  };
6810
- get?: never;
6811
- put?: never;
6812
- /** Create wire offramp */
6813
- post: {
6899
+ /**
6900
+ * Get order
6901
+ * @description Retrieves a specific order by its numeric ID.
6902
+ *
6903
+ * **Authentication**: Bearer token with x-tenant-id header required
6904
+ *
6905
+ */
6906
+ get: {
6814
6907
  parameters: {
6815
6908
  query?: never;
6816
6909
  header?: never;
6817
- path?: never;
6818
- cookie?: never;
6819
- };
6820
- requestBody: {
6821
- content: {
6822
- "application/json": components["schemas"]["FrontendL2FOrderRequest"];
6910
+ path: {
6911
+ order_id: number;
6823
6912
  };
6913
+ cookie?: never;
6824
6914
  };
6915
+ requestBody?: never;
6825
6916
  responses: {
6826
- /** @description Order created */
6917
+ /** @description Order details */
6827
6918
  200: {
6919
+ headers: {
6920
+ [name: string]: unknown;
6921
+ };
6922
+ content: {
6923
+ "application/json": {
6924
+ /** @example true */
6925
+ success: boolean;
6926
+ data: components["schemas"]["OrderDetail"];
6927
+ };
6928
+ };
6929
+ };
6930
+ /** @description Order not found */
6931
+ 404: {
6828
6932
  headers: {
6829
6933
  [name: string]: unknown;
6830
6934
  };
@@ -6832,37 +6936,54 @@ export interface paths {
6832
6936
  };
6833
6937
  };
6834
6938
  };
6939
+ put?: never;
6940
+ post?: never;
6835
6941
  delete?: never;
6836
6942
  options?: never;
6837
6943
  head?: never;
6838
6944
  patch?: never;
6839
6945
  trace?: never;
6840
6946
  };
6841
- "/frontend/orders/L2F_ACH_OFFRAMP": {
6947
+ "/frontend/orders/uuid/{order_uuid}": {
6842
6948
  parameters: {
6843
6949
  query?: never;
6844
6950
  header?: never;
6845
6951
  path?: never;
6846
6952
  cookie?: never;
6847
6953
  };
6848
- get?: never;
6849
- put?: never;
6850
- /** Create ACH offramp */
6851
- post: {
6954
+ /**
6955
+ * Get order by UUID
6956
+ * @description Retrieves a specific order by its UUID.
6957
+ *
6958
+ * **Authentication**: Bearer token with x-tenant-id header required
6959
+ *
6960
+ */
6961
+ get: {
6852
6962
  parameters: {
6853
6963
  query?: never;
6854
6964
  header?: never;
6855
- path?: never;
6856
- cookie?: never;
6857
- };
6858
- requestBody: {
6859
- content: {
6860
- "application/json": components["schemas"]["FrontendL2FOrderRequest"];
6965
+ path: {
6966
+ order_uuid: string;
6861
6967
  };
6968
+ cookie?: never;
6862
6969
  };
6970
+ requestBody?: never;
6863
6971
  responses: {
6864
- /** @description Order created */
6972
+ /** @description Order details */
6865
6973
  200: {
6974
+ headers: {
6975
+ [name: string]: unknown;
6976
+ };
6977
+ content: {
6978
+ "application/json": {
6979
+ /** @example true */
6980
+ success: boolean;
6981
+ data: components["schemas"]["OrderDetail"];
6982
+ };
6983
+ };
6984
+ };
6985
+ /** @description Order not found */
6986
+ 404: {
6866
6987
  headers: {
6867
6988
  [name: string]: unknown;
6868
6989
  };
@@ -6870,13 +6991,15 @@ export interface paths {
6870
6991
  };
6871
6992
  };
6872
6993
  };
6994
+ put?: never;
6995
+ post?: never;
6873
6996
  delete?: never;
6874
6997
  options?: never;
6875
6998
  head?: never;
6876
6999
  patch?: never;
6877
7000
  trace?: never;
6878
7001
  };
6879
- "/frontend/orders/L2F_SEPA_OFFRAMP": {
7002
+ "/frontend/orders/TRANSFER_INTERNAL": {
6880
7003
  parameters: {
6881
7004
  query?: never;
6882
7005
  header?: never;
@@ -6885,7 +7008,15 @@ export interface paths {
6885
7008
  };
6886
7009
  get?: never;
6887
7010
  put?: never;
6888
- /** Create SEPA offramp */
7011
+ /**
7012
+ * Create internal transfer
7013
+ * @description Creates an internal transfer between wallets.
7014
+ *
7015
+ * **Authentication**: Bearer token with x-tenant-id header required
7016
+ *
7017
+ * **Access Control**: User must be admin of the source wallet
7018
+ *
7019
+ */
6889
7020
  post: {
6890
7021
  parameters: {
6891
7022
  query?: never;
@@ -6895,7 +7026,19 @@ export interface paths {
6895
7026
  };
6896
7027
  requestBody: {
6897
7028
  content: {
6898
- "application/json": components["schemas"]["FrontendL2FOrderRequest"];
7029
+ "application/json": {
7030
+ /** Format: uuid */
7031
+ wallet_id: string;
7032
+ /** Format: uuid */
7033
+ from_currency_id: string;
7034
+ /**
7035
+ * Format: uuid
7036
+ * @description Receiver — a counterparty destination of type INTERNAL (points at the target wallet)
7037
+ */
7038
+ counterparty_destination_id: string;
7039
+ amount: number;
7040
+ request_id: string;
7041
+ };
6899
7042
  };
6900
7043
  };
6901
7044
  responses: {
@@ -6906,39 +7049,15 @@ export interface paths {
6906
7049
  };
6907
7050
  content?: never;
6908
7051
  };
6909
- };
6910
- };
6911
- delete?: never;
6912
- options?: never;
6913
- head?: never;
6914
- patch?: never;
6915
- trace?: never;
6916
- };
6917
- "/frontend/orders/L2F_SWIFT_OFFRAMP": {
6918
- parameters: {
6919
- query?: never;
6920
- header?: never;
6921
- path?: never;
6922
- cookie?: never;
6923
- };
6924
- get?: never;
6925
- put?: never;
6926
- /** Create SWIFT offramp */
6927
- post: {
6928
- parameters: {
6929
- query?: never;
6930
- header?: never;
6931
- path?: never;
6932
- cookie?: never;
6933
- };
6934
- requestBody: {
6935
- content: {
6936
- "application/json": components["schemas"]["FrontendL2FOrderRequest"];
7052
+ /** @description Access denied */
7053
+ 403: {
7054
+ headers: {
7055
+ [name: string]: unknown;
7056
+ };
7057
+ content?: never;
6937
7058
  };
6938
- };
6939
- responses: {
6940
- /** @description Order created */
6941
- 200: {
7059
+ /** @description Rate limit exceeded */
7060
+ 429: {
6942
7061
  headers: {
6943
7062
  [name: string]: unknown;
6944
7063
  };
@@ -6952,7 +7071,7 @@ export interface paths {
6952
7071
  patch?: never;
6953
7072
  trace?: never;
6954
7073
  };
6955
- "/frontend/orders/L2F_CHAPS_OFFRAMP": {
7074
+ "/frontend/orders/OMNIBUS_CRYPTO_TRANSFER": {
6956
7075
  parameters: {
6957
7076
  query?: never;
6958
7077
  header?: never;
@@ -6961,7 +7080,7 @@ export interface paths {
6961
7080
  };
6962
7081
  get?: never;
6963
7082
  put?: never;
6964
- /** Create CHAPS offramp */
7083
+ /** Create omnibus crypto transfer */
6965
7084
  post: {
6966
7085
  parameters: {
6967
7086
  query?: never;
@@ -6971,7 +7090,7 @@ export interface paths {
6971
7090
  };
6972
7091
  requestBody: {
6973
7092
  content: {
6974
- "application/json": components["schemas"]["FrontendL2FOrderRequest"];
7093
+ "application/json": components["schemas"]["FrontendCryptoTransferRequest"];
6975
7094
  };
6976
7095
  };
6977
7096
  responses: {
@@ -6990,7 +7109,7 @@ export interface paths {
6990
7109
  patch?: never;
6991
7110
  trace?: never;
6992
7111
  };
6993
- "/frontend/orders/L2F_FPS_OFFRAMP": {
7112
+ "/frontend/orders/SEGREGATED_CRYPTO_TRANSFER": {
6994
7113
  parameters: {
6995
7114
  query?: never;
6996
7115
  header?: never;
@@ -6999,7 +7118,7 @@ export interface paths {
6999
7118
  };
7000
7119
  get?: never;
7001
7120
  put?: never;
7002
- /** Create FPS offramp */
7121
+ /** Create segregated crypto transfer */
7003
7122
  post: {
7004
7123
  parameters: {
7005
7124
  query?: never;
@@ -7009,7 +7128,7 @@ export interface paths {
7009
7128
  };
7010
7129
  requestBody: {
7011
7130
  content: {
7012
- "application/json": components["schemas"]["FrontendL2FOrderRequest"];
7131
+ "application/json": components["schemas"]["FrontendCryptoTransferRequest"];
7013
7132
  };
7014
7133
  };
7015
7134
  responses: {
@@ -10435,7 +10554,7 @@ export interface components {
10435
10554
  * @example EXCHANGE_OMNI
10436
10555
  * @enum {string}
10437
10556
  */
10438
- OrderTypeId: "EXCHANGE_OMNI" | "EXCHANGE_OMNI_ONRAMP" | "EXCHANGE_OMNI_OFFRAMP" | "EXCHANGE_OMNI_CRYPTO" | "EXCHANGE_CRYPTO_INTERNAL" | "L2F_ACH_ONRAMP" | "L2F_ACH_OFFRAMP" | "L2F_SEPA_ONRAMP" | "L2F_SEPA_OFFRAMP" | "L2F_SWIFT_ONRAMP" | "L2F_SWIFT_OFFRAMP" | "L2F_WIRE_ONRAMP" | "L2F_WIRE_OFFRAMP" | "L2F_CHAPS_ONRAMP" | "L2F_CHAPS_OFFRAMP" | "L2F_FPS_ONRAMP" | "L2F_FPS_OFFRAMP" | "BRL_WIRE_ONRAMP" | "BRL_WIRE_OFFRAMP" | "BRL_ACH_ONRAMP" | "BRL_ACH_OFFRAMP" | "BRL_RTP_OFFRAMP" | "DLS_WIRE_ONRAMP" | "DLS_WIRE_OFFRAMP" | "DLS_ACH_ONRAMP" | "DLS_ACH_OFFRAMP" | "DLS_SEPA_ONRAMP" | "DLS_SEPA_OFFRAMP" | "DLS_SWIFT_ONRAMP" | "DLS_SWIFT_OFFRAMP" | "OMNIBUS_CRYPTO_TRANSFER" | "OMNIBUS_CRYPTO_WITHDRAWAL" | "OMNIBUS_INTERNAL_TRANSFER" | "SEGREGATED_CRYPTO_TRANSFER" | "TRANSFER_INTERNAL" | "TRANSFER_CARD_PREPAID" | "TRANSFER_CARD_SUBACCOUNT" | "TRANSFER_CARD_WHOLESALE" | "WITHDRAW_CARD_PREPAID" | "WITHDRAW_CARD_SUBACCOUNT" | "REFUND_CARD_PREPAID" | "REFUND_CARD_SUBACCOUNT" | "RN_CARDS_OFFRAMP" | "CARD_ISSUING_FEE";
10557
+ OrderTypeId: "EXCHANGE_OMNI" | "EXCHANGE_OMNI_ONRAMP" | "EXCHANGE_OMNI_OFFRAMP" | "EXCHANGE_OMNI_CRYPTO" | "EXCHANGE_CRYPTO_INTERNAL" | "L2F_ACH_ONRAMP" | "L2F_ACH_OFFRAMP" | "L2F_SEPA_ONRAMP" | "L2F_SEPA_OFFRAMP" | "L2F_SWIFT_ONRAMP" | "L2F_SWIFT_OFFRAMP" | "L2F_WIRE_ONRAMP" | "L2F_WIRE_OFFRAMP" | "L2F_CHAPS_ONRAMP" | "L2F_CHAPS_OFFRAMP" | "L2F_FPS_ONRAMP" | "L2F_FPS_OFFRAMP" | "BRL_WIRE_ONRAMP" | "BRL_WIRE_OFFRAMP" | "BRL_ACH_ONRAMP" | "BRL_ACH_OFFRAMP" | "BRL_RTP_OFFRAMP" | "DLS_WIRE_ONRAMP" | "DLS_WIRE_OFFRAMP" | "DLS_ACH_ONRAMP" | "DLS_ACH_OFFRAMP" | "DLS_SEPA_ONRAMP" | "DLS_SEPA_OFFRAMP" | "DLS_SWIFT_ONRAMP" | "DLS_SWIFT_OFFRAMP" | "BC1_SEPA_ONRAMP" | "BC1_SEPA_OFFRAMP" | "BC1_SWIFT_ONRAMP" | "BC1_SWIFT_OFFRAMP" | "BC3_SEPA_ONRAMP" | "BC3_SEPA_OFFRAMP" | "OMNIBUS_CRYPTO_TRANSFER" | "OMNIBUS_CRYPTO_WITHDRAWAL" | "OMNIBUS_INTERNAL_TRANSFER" | "SEGREGATED_CRYPTO_TRANSFER" | "TRANSFER_INTERNAL" | "TRANSFER_CARD_PREPAID" | "TRANSFER_CARD_SUBACCOUNT" | "TRANSFER_CARD_WHOLESALE" | "WITHDRAW_CARD_PREPAID" | "WITHDRAW_CARD_SUBACCOUNT" | "REFUND_CARD_PREPAID" | "REFUND_CARD_SUBACCOUNT" | "RN_CARDS_OFFRAMP" | "CARD_ISSUING_FEE";
10439
10558
  OrderCalculation: {
10440
10559
  /**
10441
10560
  * Format: uuid
@@ -11166,11 +11285,16 @@ export interface components {
11166
11285
  amount_to?: number | null;
11167
11286
  order_type?: string;
11168
11287
  /** @enum {string} */
11169
- status?: "NEW" | "PROCESSING" | "COMPLETE" | "FAILED" | "CANCELED";
11288
+ status?: "NEW" | "EXPECTED" | "PROCESSING" | "COMPLETE" | "FAILED" | "CANCELED" | "REFUNDED";
11170
11289
  /** Format: uuid */
11171
11290
  sub_account_id?: string | null;
11172
11291
  info?: string | null;
11173
11292
  meta?: components["schemas"]["OrderMeta"];
11293
+ /**
11294
+ * Format: date-time
11295
+ * @description Requested execution time for scheduled payments (status EXPECTED); null for immediate orders
11296
+ */
11297
+ scheduled_at?: string | null;
11174
11298
  /** Format: date-time */
11175
11299
  created_at?: string;
11176
11300
  /** Format: date-time */
@@ -11215,6 +11339,11 @@ export interface components {
11215
11339
  wallet_account_id?: string;
11216
11340
  reference?: string;
11217
11341
  note?: string;
11342
+ /**
11343
+ * Format: date-time
11344
+ * @description Optional. Schedule the payment for a future time (min 1 hour, max 90 days ahead). No funds are reserved; after approval the order waits in EXPECTED status and executes automatically.
11345
+ */
11346
+ scheduled_at?: string;
11218
11347
  /** @description Optional supporting documents persisted with the order. */
11219
11348
  documents?: components["schemas"]["OrderDocumentInput"][];
11220
11349
  };
@@ -11235,6 +11364,11 @@ export interface components {
11235
11364
  counterparty_destination_id: string;
11236
11365
  reference?: string;
11237
11366
  note?: string;
11367
+ /**
11368
+ * Format: date-time
11369
+ * @description Optional. Schedule the payment for a future time (min 1 hour, max 90 days ahead). No funds are reserved; after approval the order waits in EXPECTED status and executes automatically.
11370
+ */
11371
+ scheduled_at?: string;
11238
11372
  /** @description Optional supporting documents persisted with the order. */
11239
11373
  documents?: components["schemas"]["OrderDocumentInput"][];
11240
11374
  };
@@ -11365,6 +11499,66 @@ export interface components {
11365
11499
  /** Format: uuid */
11366
11500
  wallet_id?: string;
11367
11501
  };
11502
+ MassPayout: {
11503
+ /** Format: uuid */
11504
+ id?: string;
11505
+ /** Format: uuid */
11506
+ wallet_id?: string;
11507
+ /** Format: uuid */
11508
+ currency_id?: string;
11509
+ /**
11510
+ * Format: uuid
11511
+ * @description Source virtual account for banking payouts (required only when the batch contains banking recipients)
11512
+ */
11513
+ virtual_account_id?: string | null;
11514
+ name?: string;
11515
+ /** @enum {string} */
11516
+ status?: "DRAFT" | "PENDING_APPROVAL" | "PROCESSING" | "COMPLETED" | "FAILED" | "CANCELED";
11517
+ total_items?: number;
11518
+ total_amount?: number;
11519
+ completed_count?: number;
11520
+ failed_count?: number;
11521
+ /**
11522
+ * Format: uuid
11523
+ * @description User id of the wallet member who approved the batch; null until approved
11524
+ */
11525
+ approved_by?: string | null;
11526
+ /** Format: date-time */
11527
+ approved_at?: string | null;
11528
+ error_message?: string | null;
11529
+ /** Format: date-time */
11530
+ created_at?: string;
11531
+ /** Format: date-time */
11532
+ finished_at?: string | null;
11533
+ };
11534
+ MassPayoutItem: {
11535
+ /** Format: uuid */
11536
+ id?: string;
11537
+ /** Format: uuid */
11538
+ destination_id?: string;
11539
+ amount?: number;
11540
+ /** @enum {string} */
11541
+ status?: "PENDING" | "PROCESSING" | "COMPLETED" | "FAILED";
11542
+ /**
11543
+ * Format: uuid
11544
+ * @description The regular order created for this item at execution
11545
+ */
11546
+ order_id?: string | null;
11547
+ error_message?: string | null;
11548
+ position?: number;
11549
+ /** Format: date-time */
11550
+ created_at?: string;
11551
+ /** Format: date-time */
11552
+ processed_at?: string | null;
11553
+ };
11554
+ MassPayoutItemInput: {
11555
+ /**
11556
+ * Format: uuid
11557
+ * @description Existing counterparty destination of the source wallet
11558
+ */
11559
+ destination_id: string;
11560
+ amount: number;
11561
+ };
11368
11562
  };
11369
11563
  responses: {
11370
11564
  /** @description Authentication credentials are missing or invalid */
@@ -11422,6 +11616,9 @@ export interface components {
11422
11616
  * @example e04c0c85-b031-47d7-8541-207b4e83d91a
11423
11617
  */
11424
11618
  TenantId: string;
11619
+ /** @description Source wallet the batches belong to */
11620
+ MassPayoutWalletId: string;
11621
+ MassPayoutId: string;
11425
11622
  };
11426
11623
  requestBodies: never;
11427
11624
  headers: never;