bybit-connector-ruby 0.1.0

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.
@@ -0,0 +1,359 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bybit
4
+ module RestApi
5
+ class MarketService < BaseService
6
+ # Get ADL alert information for the specified symbol.
7
+ #
8
+ # GET /v5/market/adlalert
9
+ #
10
+ # @option kwargs [String] :symbol Symbol name
11
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
12
+ # @see https://bybit-exchange.github.io/docs/v5/market/adl-alert
13
+ def get_adl_alert(**kwargs)
14
+ params = kwargs.dup
15
+ params = Bybit::Utils::WireKeys.camelize(params)
16
+ @session.public_request(path: '/v5/market/adlAlert', params: params)
17
+ end
18
+
19
+ # Get the delivery price for delivery contracts.
20
+ #
21
+ # GET /v5/market/delivery-price
22
+ #
23
+ # @param category [String] Product type
24
+ # @option kwargs [String] :symbol Symbol name
25
+ # @option kwargs [String] :base_coin Base coin
26
+ # @option kwargs [String] :settle_coin Settle coin
27
+ # @option kwargs [Integer] :limit Limit for data size per page
28
+ # @option kwargs [String] :cursor Cursor for pagination
29
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
30
+ # @see https://bybit-exchange.github.io/docs/v5/market/delivery-price
31
+ def get_delivery_price(category:, **kwargs)
32
+ params = kwargs.merge(category: category)
33
+ params = Bybit::Utils::WireKeys.camelize(params)
34
+ @session.public_request(path: '/v5/market/delivery-price', params: params)
35
+ end
36
+
37
+ # Get the fee group structure information.
38
+ #
39
+ # GET /v5/market/fee-group-info
40
+ #
41
+ # @param product_type [String] Product type
42
+ # @option kwargs [String] :group_id Fee group id
43
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
44
+ # @see https://bybit-exchange.github.io/docs/v5/market/fee-group-info
45
+ def get_fee_group_info(product_type:, **kwargs)
46
+ params = kwargs.merge(product_type: product_type)
47
+ params = Bybit::Utils::WireKeys.camelize(params)
48
+ @session.public_request(path: '/v5/market/fee-group-info', params: params)
49
+ end
50
+
51
+ # Get the historical funding rate for a symbol.
52
+ #
53
+ # GET /v5/market/funding/history
54
+ #
55
+ # @param category [String] Product type
56
+ # @param symbol [String] Symbol name
57
+ # @option kwargs [Integer] :start_time Start timestamp (ms)
58
+ # @option kwargs [Integer] :end_time End timestamp (ms)
59
+ # @option kwargs [Integer] :limit Limit for data size per page
60
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
61
+ # @see https://bybit-exchange.github.io/docs/v5/market/history-fund-rate
62
+ def get_funding_rate_history(category:, symbol:, **kwargs)
63
+ params = kwargs.merge(category: category, symbol: symbol)
64
+ params = Bybit::Utils::WireKeys.camelize(params)
65
+ @session.public_request(path: '/v5/market/funding/history', params: params)
66
+ end
67
+
68
+ # Get the historical volatility for options.
69
+ #
70
+ # GET /v5/market/historical-volatility
71
+ #
72
+ # @param category [String] Product type
73
+ # @option kwargs [String] :base_coin Base coin
74
+ # @option kwargs [String] :quote_coin Quote coin
75
+ # @option kwargs [Integer] :period Period
76
+ # @option kwargs [Integer] :start_time Start timestamp (ms)
77
+ # @option kwargs [Integer] :end_time End timestamp (ms)
78
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
79
+ # @see https://bybit-exchange.github.io/docs/v5/market/iv
80
+ def get_historical_volatility(category:, **kwargs)
81
+ params = kwargs.merge(category: category)
82
+ params = Bybit::Utils::WireKeys.camelize(params)
83
+ @session.public_request(path: '/v5/market/historical-volatility', params: params)
84
+ end
85
+
86
+ # Get the components of the index price.
87
+ #
88
+ # GET /v5/market/index-price-components
89
+ #
90
+ # @param index_name [String] Index name
91
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
92
+ def get_index_price_components(index_name:, **kwargs)
93
+ params = kwargs.merge(index_name: index_name)
94
+ params = Bybit::Utils::WireKeys.camelize(params)
95
+ @session.public_request(path: '/v5/market/index-price-components', params: params)
96
+ end
97
+
98
+ # Get index price kline data for a symbol.
99
+ #
100
+ # GET /v5/market/index-price-kline
101
+ #
102
+ # @param symbol [String] Symbol name
103
+ # @param interval [String] Kline interval
104
+ # @option kwargs [String] :category Product type
105
+ # @option kwargs [Integer] :start Start timestamp (ms)
106
+ # @option kwargs [Integer] :end_ End timestamp (ms)
107
+ # @option kwargs [Integer] :limit Limit for data size per page
108
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
109
+ # @see https://bybit-exchange.github.io/docs/v5/market/index-kline
110
+ def get_index_price_kline(symbol:, interval:, **kwargs)
111
+ params = kwargs.merge(symbol: symbol, interval: interval)
112
+ params[:end] = params.delete(:end_) if params.key?(:end_)
113
+ params = Bybit::Utils::WireKeys.camelize(params)
114
+ @session.public_request(path: '/v5/market/index-price-kline', params: params)
115
+ end
116
+
117
+ # Get the specification of instruments.
118
+ #
119
+ # GET /v5/market/instruments-info
120
+ #
121
+ # @param category [String] Product type
122
+ # @option kwargs [String] :symbol Symbol name
123
+ # @option kwargs [String] :status Symbol status filter
124
+ # @option kwargs [String] :base_coin Base coin
125
+ # @option kwargs [Integer] :limit Limit for data size per page
126
+ # @option kwargs [String] :cursor Cursor for pagination
127
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
128
+ # @see https://bybit-exchange.github.io/docs/v5/market/instrument
129
+ def get_instruments_info(category:, **kwargs)
130
+ params = kwargs.merge(category: category)
131
+ params = Bybit::Utils::WireKeys.camelize(params)
132
+ @session.public_request(path: '/v5/market/instruments-info', params: params)
133
+ end
134
+
135
+ # Get the insurance pool balance data.
136
+ #
137
+ # GET /v5/market/insurance
138
+ #
139
+ # @option kwargs [String] :coin Coin name
140
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
141
+ # @see https://bybit-exchange.github.io/docs/v5/market/insurance
142
+ def get_insurance_pool(**kwargs)
143
+ params = kwargs.dup
144
+ params = Bybit::Utils::WireKeys.camelize(params)
145
+ @session.public_request(path: '/v5/market/insurance', params: params)
146
+ end
147
+
148
+ # Get the long/short account ratio for a symbol.
149
+ #
150
+ # GET /v5/market/account-ratio
151
+ #
152
+ # @param category [String] Product type
153
+ # @param symbol [String] Symbol name
154
+ # @param period [String] Data recording period
155
+ # @option kwargs [String] :start_time Start timestamp (ms)
156
+ # @option kwargs [String] :end_time End timestamp (ms)
157
+ # @option kwargs [Integer] :limit Limit for data size per page
158
+ # @option kwargs [String] :cursor Cursor for pagination
159
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
160
+ # @see https://bybit-exchange.github.io/docs/v5/market/long-short-ratio
161
+ def get_long_short_ratio(category:, symbol:, period:, **kwargs)
162
+ params = kwargs.merge(category: category, symbol: symbol, period: period)
163
+ params = Bybit::Utils::WireKeys.camelize(params)
164
+ @session.public_request(path: '/v5/market/account-ratio', params: params)
165
+ end
166
+
167
+ # Get mark price kline data for a symbol.
168
+ #
169
+ # GET /v5/market/mark-price-kline
170
+ #
171
+ # @param symbol [String] Symbol name
172
+ # @param interval [String] Kline interval
173
+ # @option kwargs [String] :category Product type
174
+ # @option kwargs [Integer] :start Start timestamp (ms)
175
+ # @option kwargs [Integer] :end_ End timestamp (ms)
176
+ # @option kwargs [Integer] :limit Limit for data size per page
177
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
178
+ # @see https://bybit-exchange.github.io/docs/v5/market/mark-kline
179
+ def get_mark_price_kline(symbol:, interval:, **kwargs)
180
+ params = kwargs.merge(symbol: symbol, interval: interval)
181
+ params[:end] = params.delete(:end_) if params.key?(:end_)
182
+ params = Bybit::Utils::WireKeys.camelize(params)
183
+ @session.public_request(path: '/v5/market/mark-price-kline', params: params)
184
+ end
185
+
186
+ # Get kline (candlestick) data for a symbol.
187
+ #
188
+ # GET /v5/market/kline
189
+ #
190
+ # @param symbol [String] Symbol name
191
+ # @param interval [String] Kline interval
192
+ # @option kwargs [String] :category Product type
193
+ # @option kwargs [Integer] :start Start timestamp (ms)
194
+ # @option kwargs [Integer] :end_ End timestamp (ms)
195
+ # @option kwargs [Integer] :limit Limit for data size per page
196
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
197
+ # @see https://bybit-exchange.github.io/docs/v5/market/kline
198
+ def get_kline(symbol:, interval:, **kwargs)
199
+ params = kwargs.merge(symbol: symbol, interval: interval)
200
+ params[:end] = params.delete(:end_) if params.key?(:end_)
201
+ params = Bybit::Utils::WireKeys.camelize(params)
202
+ @session.public_request(path: '/v5/market/kline', params: params)
203
+ end
204
+
205
+ # Get the new delivery price for delivery contracts.
206
+ #
207
+ # GET /v5/market/new-delivery-price
208
+ #
209
+ # @param category [String] Product type
210
+ # @param base_coin [String] Base coin
211
+ # @option kwargs [String] :settle_coin Settle coin
212
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
213
+ # @see https://bybit-exchange.github.io/docs/v5/market/new-delivery-price
214
+ def get_new_delivery_price(category:, base_coin:, **kwargs)
215
+ params = kwargs.merge(category: category, base_coin: base_coin)
216
+ params = Bybit::Utils::WireKeys.camelize(params)
217
+ @session.public_request(path: '/v5/market/new-delivery-price', params: params)
218
+ end
219
+
220
+ # Get the open interest data for a symbol.
221
+ #
222
+ # GET /v5/market/open-interest
223
+ #
224
+ # @param category [String] Product type
225
+ # @param symbol [String] Symbol name
226
+ # @param interval_time [String] Interval time
227
+ # @option kwargs [Integer] :start_time Start timestamp (ms)
228
+ # @option kwargs [Integer] :end_time End timestamp (ms)
229
+ # @option kwargs [Integer] :limit Limit for data size per page
230
+ # @option kwargs [String] :cursor Cursor for pagination
231
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
232
+ # @see https://bybit-exchange.github.io/docs/v5/market/open-interest
233
+ def get_open_interest(category:, symbol:, interval_time:, **kwargs)
234
+ params = kwargs.merge(category: category, symbol: symbol, interval_time: interval_time)
235
+ params = Bybit::Utils::WireKeys.camelize(params)
236
+ @session.public_request(path: '/v5/market/open-interest', params: params)
237
+ end
238
+
239
+ # Get the order price limit for a symbol.
240
+ #
241
+ # GET /v5/market/price-limit
242
+ #
243
+ # @param symbol [String] Symbol name
244
+ # @option kwargs [String] :category Product type
245
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
246
+ def get_order_price_limit(symbol:, **kwargs)
247
+ params = kwargs.merge(symbol: symbol)
248
+ params = Bybit::Utils::WireKeys.camelize(params)
249
+ @session.public_request(path: '/v5/market/price-limit', params: params)
250
+ end
251
+
252
+ # Get orderbook data for a specified symbol and category.
253
+ #
254
+ # GET /v5/market/orderbook
255
+ #
256
+ # @param category [String] Product type: spot, linear, inverse, option
257
+ # @param symbol [String] Symbol name
258
+ # @option kwargs [Integer] :limit Limit size for each bid/ask
259
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
260
+ # @see https://bybit-exchange.github.io/docs/v5/market/orderbook
261
+ def get_orderbook(category:, symbol:, **kwargs)
262
+ params = kwargs.merge(category: category, symbol: symbol)
263
+ params = Bybit::Utils::WireKeys.camelize(params)
264
+ @session.public_request(path: '/v5/market/orderbook', params: params)
265
+ end
266
+
267
+ # Get premium index price kline data.
268
+ #
269
+ # GET /v5/market/premium-index-price-kline
270
+ #
271
+ # @param symbol [String] Symbol name
272
+ # @param interval [String] Kline interval
273
+ # @option kwargs [String] :category Product type: linear
274
+ # @option kwargs [Integer] :start The start timestamp (ms)
275
+ # @option kwargs [Integer] :end_ The end timestamp (ms)
276
+ # @option kwargs [Integer] :limit Limit for data size per page. [1, 1000]. Default: 200
277
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
278
+ # @see https://bybit-exchange.github.io/docs/v5/market/premium-index-kline
279
+ def get_premium_index_price_kline(symbol:, interval:, **kwargs)
280
+ params = kwargs.merge(symbol: symbol, interval: interval)
281
+ params[:end] = params.delete(:end_) if params.key?(:end_)
282
+ params = Bybit::Utils::WireKeys.camelize(params)
283
+ @session.public_request(path: '/v5/market/premium-index-price-kline', params: params)
284
+ end
285
+
286
+ # Get recent public trades.
287
+ #
288
+ # GET /v5/market/recent-trade
289
+ #
290
+ # @param category [String] Product type: spot, linear, inverse, option
291
+ # @option kwargs [String] :symbol Symbol name
292
+ # @option kwargs [String] :base_coin Base coin, for option only
293
+ # @option kwargs [String] :option_type Option type: Call or Put, for option only
294
+ # @option kwargs [Integer] :limit Limit for data size per page
295
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
296
+ # @see https://bybit-exchange.github.io/docs/v5/market/recent-trade
297
+ def get_recent_public_trades(category:, **kwargs)
298
+ params = kwargs.merge(category: category)
299
+ params = Bybit::Utils::WireKeys.camelize(params)
300
+ @session.public_request(path: '/v5/market/recent-trade', params: params)
301
+ end
302
+
303
+ # Get risk limit information.
304
+ #
305
+ # GET /v5/market/risk-limit
306
+ #
307
+ # @param category [String] Product type: linear, inverse
308
+ # @option kwargs [String] :symbol Symbol name
309
+ # @option kwargs [String] :cursor Cursor for pagination
310
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
311
+ # @see https://bybit-exchange.github.io/docs/v5/market/risk-limit
312
+ def get_risk_limit(category:, **kwargs)
313
+ params = kwargs.merge(category: category)
314
+ params = Bybit::Utils::WireKeys.camelize(params)
315
+ @session.public_request(path: '/v5/market/risk-limit', params: params)
316
+ end
317
+
318
+ # Get RPI (Retail Price Improvement) orderbook data.
319
+ #
320
+ # GET /v5/market/rpi_orderbook
321
+ #
322
+ # @param symbol [String] Symbol name
323
+ # @param limit [Integer] Limit size for each bid/ask
324
+ # @option kwargs [String] :category Product type: spot
325
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
326
+ # @see https://bybit-exchange.github.io/docs/v5/market/rpi-orderbook
327
+ def get_rpi_orderbook(symbol:, limit:, **kwargs)
328
+ params = kwargs.merge(symbol: symbol, limit: limit)
329
+ params = Bybit::Utils::WireKeys.camelize(params)
330
+ @session.public_request(path: '/v5/market/rpi_orderbook', params: params)
331
+ end
332
+
333
+ # Get Bybit server time.
334
+ #
335
+ # GET /v5/market/time
336
+ #
337
+ # @see https://bybit-exchange.github.io/docs/v5/market/time
338
+ def get_server_time
339
+ @session.public_request(path: '/v5/market/time')
340
+ end
341
+
342
+ # Get tickers information for a specified category.
343
+ #
344
+ # GET /v5/market/tickers
345
+ #
346
+ # @param category [String] Product type: spot, linear, inverse, option
347
+ # @option kwargs [String] :symbol Symbol name
348
+ # @option kwargs [String] :base_coin Base coin, for option only
349
+ # @option kwargs [String] :exp_date Expiry date, for option only
350
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
351
+ # @see https://bybit-exchange.github.io/docs/v5/market/tickers
352
+ def get_tickers(category:, **kwargs)
353
+ params = kwargs.merge(category: category)
354
+ params = Bybit::Utils::WireKeys.camelize(params)
355
+ @session.public_request(path: '/v5/market/tickers', params: params)
356
+ end
357
+ end
358
+ end
359
+ end
@@ -0,0 +1,256 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bybit
4
+ module RestApi
5
+ class P2pService < BaseService
6
+ # Get the P2P user account information for the caller.
7
+ #
8
+ # POST /v5/p2p/user/personal/info
9
+ def get_account_info
10
+ @session.sign_request(method: :post, path: '/v5/p2p/user/personal/info', body: {})
11
+ end
12
+
13
+ # Get online P2P advertisement list filtered by token, currency and side.
14
+ #
15
+ # POST /v5/p2p/item/online
16
+ #
17
+ # @param token_id [String] Token ID
18
+ # @param currency_id [String] Currency ID
19
+ # @param side [String] Side: 0 buy, 1 sell
20
+ # @option kwargs [String] :page Page number
21
+ # @option kwargs [String] :size Page size
22
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
23
+ def get_ads(token_id:, currency_id:, side:, **kwargs)
24
+ params = kwargs.merge(token_id: token_id, currency_id: currency_id, side: side)
25
+ params = Bybit::Utils::WireKeys.camelize(params)
26
+ @session.sign_request(method: :post, path: '/v5/p2p/item/online', body: params)
27
+ end
28
+
29
+ # Get simplified list of all P2P orders with optional filters.
30
+ #
31
+ # POST /v5/p2p/order/simplifylist
32
+ #
33
+ # @param page [Integer] Page number
34
+ # @param size [Integer] Page size
35
+ # @option kwargs [Integer] :status Order status filter
36
+ # @option kwargs [String] :begin_time Begin time in milliseconds
37
+ # @option kwargs [String] :end_time End time in milliseconds
38
+ # @option kwargs [String] :token_id Token ID
39
+ # @option kwargs [Integer] :side Side: 0 buy, 1 sell
40
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
41
+ def get_all_orders(page:, size:, **kwargs)
42
+ params = kwargs.merge(page: page, size: size)
43
+ params = Bybit::Utils::WireKeys.camelize(params)
44
+ @session.sign_request(method: :post, path: '/v5/p2p/order/simplifyList', body: params)
45
+ end
46
+
47
+ # Get the paginated chat message list for a P2P order.
48
+ #
49
+ # POST /v5/p2p/order/message/listpage
50
+ #
51
+ # @param order_id [String] Order ID
52
+ # @param size [String] Page size
53
+ # @option kwargs [String] :current_page Current page number
54
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
55
+ def get_chat_messages(order_id:, size:, **kwargs)
56
+ params = kwargs.merge(order_id: order_id, size: size)
57
+ params = Bybit::Utils::WireKeys.camelize(params)
58
+ @session.sign_request(method: :post, path: '/v5/p2p/order/message/listpage', body: params)
59
+ end
60
+
61
+ # Get counterparty user info for a P2P order.
62
+ #
63
+ # POST /v5/p2p/user/order/personal/info
64
+ #
65
+ # @option kwargs [String] :original_uid Original user ID of the counterparty.
66
+ # @option kwargs [String] :order_id P2P order ID.
67
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
68
+ def get_counterparty_user_info(**kwargs)
69
+ params = kwargs.dup
70
+ params = Bybit::Utils::WireKeys.camelize(params)
71
+ @session.sign_request(method: :post, path: '/v5/p2p/user/order/personal/info', body: params)
72
+ end
73
+
74
+ # Get details of a specific P2P advertisement owned by the caller.
75
+ #
76
+ # POST /v5/p2p/item/info
77
+ #
78
+ # @param item_id [String] Advertisement ID
79
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
80
+ def get_my_ad_details(item_id:, **kwargs)
81
+ params = kwargs.merge(item_id: item_id)
82
+ params = Bybit::Utils::WireKeys.camelize(params)
83
+ @session.sign_request(method: :post, path: '/v5/p2p/item/info', body: params)
84
+ end
85
+
86
+ # Get the list of the caller's own P2P advertisements.
87
+ #
88
+ # POST /v5/p2p/item/personal/list
89
+ #
90
+ # @option kwargs [String] :item_id Advertisement ID
91
+ # @option kwargs [String] :status Ad status filter
92
+ # @option kwargs [String] :side Side: 0 buy, 1 sell
93
+ # @option kwargs [String] :token_id Token ID
94
+ # @option kwargs [String] :page Page number
95
+ # @option kwargs [String] :size Page size
96
+ # @option kwargs [String] :currency_id Currency ID
97
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
98
+ def get_my_ads(**kwargs)
99
+ params = kwargs.dup
100
+ params = Bybit::Utils::WireKeys.camelize(params)
101
+ @session.sign_request(method: :post, path: '/v5/p2p/item/personal/list', body: params)
102
+ end
103
+
104
+ # Get the details of a specific P2P order.
105
+ #
106
+ # POST /v5/p2p/order/info
107
+ #
108
+ # @param order_id [String] Order ID
109
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
110
+ def get_order_detail(order_id:, **kwargs)
111
+ params = kwargs.merge(order_id: order_id)
112
+ params = Bybit::Utils::WireKeys.camelize(params)
113
+ @session.sign_request(method: :post, path: '/v5/p2p/order/info', body: params)
114
+ end
115
+
116
+ # Get simplified list of pending P2P orders with optional filters.
117
+ #
118
+ # POST /v5/p2p/order/pending/simplifylist
119
+ #
120
+ # @param page [Integer] Page number
121
+ # @param size [Integer] Page size
122
+ # @option kwargs [Integer] :status Order status filter
123
+ # @option kwargs [String] :begin_time Begin time in milliseconds
124
+ # @option kwargs [String] :end_time End time in milliseconds
125
+ # @option kwargs [String] :token_id Token ID
126
+ # @option kwargs [Integer] :side Side: 0 buy, 1 sell
127
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
128
+ def get_pending_orders(page:, size:, **kwargs)
129
+ params = kwargs.merge(page: page, size: size)
130
+ params = Bybit::Utils::WireKeys.camelize(params)
131
+ @session.sign_request(method: :post, path: '/v5/p2p/order/pending/simplifyList', body: params)
132
+ end
133
+
134
+ # Get the current user's P2P payment method list.
135
+ #
136
+ # POST /v5/p2p/user/payment/list
137
+ def get_user_payment
138
+ @session.sign_request(method: :post, path: '/v5/p2p/user/payment/list', body: {})
139
+ end
140
+
141
+ # Mark a P2P order as paid by the buyer.
142
+ #
143
+ # POST /v5/p2p/order/pay
144
+ #
145
+ # @param order_id [String] Order ID
146
+ # @param payment_type [String] Payment method type
147
+ # @param payment_id [String] Payment method ID
148
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
149
+ def mark_order_as_paid(order_id:, payment_type:, payment_id:, **kwargs)
150
+ params = kwargs.merge(order_id: order_id, payment_type: payment_type, payment_id: payment_id)
151
+ params = Bybit::Utils::WireKeys.camelize(params)
152
+ @session.sign_request(method: :post, path: '/v5/p2p/order/pay', body: params)
153
+ end
154
+
155
+ # Create a new P2P advertisement.
156
+ #
157
+ # POST /v5/p2p/item/create
158
+ #
159
+ # @param token_id [String] Token ID
160
+ # @param currency_id [String] Currency ID
161
+ # @param side [String] Side: 0 buy, 1 sell
162
+ # @param price_type [String] Price type: 0 fixed, 1 floating
163
+ # @param premium [String] Premium value
164
+ # @param price [String] Ad price
165
+ # @param min_amount [String] Minimum order amount
166
+ # @param max_amount [String] Maximum order amount
167
+ # @param remark [String] Ad remark
168
+ # @param trading_preference_set [Hash] Trading preference settings
169
+ # @param payment_ids [Array] Payment method IDs
170
+ # @param quantity [String] Ad quantity
171
+ # @param payment_period [String] Payment period in minutes
172
+ # @param item_type [String] Item type
173
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
174
+ def create_ad(token_id:, currency_id:, side:, price_type:, premium:, price:, min_amount:, max_amount:, remark:, trading_preference_set:, payment_ids:, quantity:, payment_period:, item_type:, **kwargs)
175
+ params = kwargs.merge(token_id: token_id, currency_id: currency_id, side: side, price_type: price_type, premium: premium, price: price, min_amount: min_amount, max_amount: max_amount, remark: remark, trading_preference_set: trading_preference_set, payment_ids: payment_ids, quantity: quantity, payment_period: payment_period, item_type: item_type)
176
+ params = Bybit::Utils::WireKeys.camelize(params)
177
+ @session.sign_request(method: :post, path: '/v5/p2p/item/create', body: params)
178
+ end
179
+
180
+ # Release the assets held for a P2P order after payment is confirmed.
181
+ #
182
+ # POST /v5/p2p/order/finish
183
+ #
184
+ # @param order_id [String] Order ID
185
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
186
+ def release_assets(order_id:, **kwargs)
187
+ params = kwargs.merge(order_id: order_id)
188
+ params = Bybit::Utils::WireKeys.camelize(params)
189
+ @session.sign_request(method: :post, path: '/v5/p2p/order/finish', body: params)
190
+ end
191
+
192
+ # Cancel/remove an existing P2P advertisement.
193
+ #
194
+ # POST /v5/p2p/item/cancel
195
+ #
196
+ # @param item_id [String] Advertisement ID
197
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
198
+ def remove_ad(item_id:, **kwargs)
199
+ params = kwargs.merge(item_id: item_id)
200
+ params = Bybit::Utils::WireKeys.camelize(params)
201
+ @session.sign_request(method: :post, path: '/v5/p2p/item/cancel', body: params)
202
+ end
203
+
204
+ # Send a chat message in a P2P order conversation.
205
+ #
206
+ # POST /v5/p2p/order/message/send
207
+ #
208
+ # @param message [String] Message content
209
+ # @param content_type [String] Message content type
210
+ # @param order_id [String] Order ID
211
+ # @param msg_uuid [String] Message UUID
212
+ # @option kwargs [String] :file_name File name when sending a file
213
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
214
+ def send_chat_message(message:, content_type:, order_id:, msg_uuid:, **kwargs)
215
+ params = kwargs.merge(message: message, content_type: content_type, order_id: order_id, msg_uuid: msg_uuid)
216
+ params = Bybit::Utils::WireKeys.camelize(params)
217
+ @session.sign_request(method: :post, path: '/v5/p2p/order/message/send', body: params)
218
+ end
219
+
220
+ # Update or relist an existing P2P advertisement.
221
+ #
222
+ # POST /v5/p2p/item/update
223
+ #
224
+ # @param id [String] Advertisement ID
225
+ # @param price_type [String] Price type: 0 fixed, 1 floating
226
+ # @param premium [String] Premium value
227
+ # @param price [String] Ad price
228
+ # @param min_amount [String] Minimum order amount
229
+ # @param max_amount [String] Maximum order amount
230
+ # @param remark [String] Ad remark
231
+ # @param trading_preference_set [Hash] Trading preference settings
232
+ # @param payment_ids [Array] Payment method IDs
233
+ # @param action_type [String] Action type: MODIFY or ACTIVE
234
+ # @param quantity [String] Ad quantity
235
+ # @param payment_period [String] Payment period in minutes
236
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
237
+ def update_ad(id:, price_type:, premium:, price:, min_amount:, max_amount:, remark:, trading_preference_set:, payment_ids:, action_type:, quantity:, payment_period:, **kwargs)
238
+ params = kwargs.merge(id: id, price_type: price_type, premium: premium, price: price, min_amount: min_amount, max_amount: max_amount, remark: remark, trading_preference_set: trading_preference_set, payment_ids: payment_ids, action_type: action_type, quantity: quantity, payment_period: payment_period)
239
+ params = Bybit::Utils::WireKeys.camelize(params)
240
+ @session.sign_request(method: :post, path: '/v5/p2p/item/update', body: params)
241
+ end
242
+
243
+ # Upload a file for use in a P2P order chat.
244
+ #
245
+ # POST /v5/p2p/oss/upload_file
246
+ #
247
+ # @param upload_file [String] File to upload
248
+ # @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
249
+ def upload_chat_file(upload_file:, **kwargs)
250
+ params = kwargs.merge(upload_file: upload_file)
251
+ params = Bybit::Utils::WireKeys.camelize(params)
252
+ @session.sign_request(method: :post, path: '/v5/p2p/oss/upload_file', body: params)
253
+ end
254
+ end
255
+ end
256
+ end