sports-odds-api 1.2.2 → 1.3.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.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +38 -0
  3. data/README.md +11 -1
  4. data/lib/sports_odds_api/client.rb +28 -1
  5. data/lib/sports_odds_api/internal/transport/base_client.rb +5 -0
  6. data/lib/sports_odds_api/internal/transport/pooled_net_requester.rb +13 -11
  7. data/lib/sports_odds_api/internal/util.rb +61 -10
  8. data/lib/sports_odds_api/models/event.rb +197 -4
  9. data/lib/sports_odds_api/models/event_get_params.rb +22 -4
  10. data/lib/sports_odds_api/models/market.rb +206 -0
  11. data/lib/sports_odds_api/models/market_get_params.rb +150 -0
  12. data/lib/sports_odds_api/models/player_get_params.rb +3 -3
  13. data/lib/sports_odds_api/models/team.rb +107 -2
  14. data/lib/sports_odds_api/models/team_get_params.rb +3 -3
  15. data/lib/sports_odds_api/models.rb +4 -0
  16. data/lib/sports_odds_api/resources/account.rb +1 -0
  17. data/lib/sports_odds_api/resources/events.rb +11 -3
  18. data/lib/sports_odds_api/resources/leagues.rb +3 -1
  19. data/lib/sports_odds_api/resources/markets.rb +87 -0
  20. data/lib/sports_odds_api/resources/players.rb +4 -2
  21. data/lib/sports_odds_api/resources/sports.rb +1 -0
  22. data/lib/sports_odds_api/resources/stats.rb +3 -1
  23. data/lib/sports_odds_api/resources/stream.rb +3 -1
  24. data/lib/sports_odds_api/resources/teams.rb +4 -2
  25. data/lib/sports_odds_api/version.rb +1 -1
  26. data/lib/sports_odds_api.rb +3 -0
  27. data/rbi/sports_odds_api/client.rbi +12 -0
  28. data/rbi/sports_odds_api/internal/util.rbi +29 -1
  29. data/rbi/sports_odds_api/models/event.rbi +387 -3
  30. data/rbi/sports_odds_api/models/event_get_params.rbi +30 -4
  31. data/rbi/sports_odds_api/models/market.rbi +326 -0
  32. data/rbi/sports_odds_api/models/market_get_params.rbi +224 -0
  33. data/rbi/sports_odds_api/models/player_get_params.rbi +4 -4
  34. data/rbi/sports_odds_api/models/team.rbi +186 -3
  35. data/rbi/sports_odds_api/models/team_get_params.rbi +4 -4
  36. data/rbi/sports_odds_api/models.rbi +4 -0
  37. data/rbi/sports_odds_api/resources/account.rbi +1 -0
  38. data/rbi/sports_odds_api/resources/events.rbi +11 -2
  39. data/rbi/sports_odds_api/resources/leagues.rbi +1 -0
  40. data/rbi/sports_odds_api/resources/markets.rbi +79 -0
  41. data/rbi/sports_odds_api/resources/players.rbi +3 -2
  42. data/rbi/sports_odds_api/resources/sports.rbi +1 -0
  43. data/rbi/sports_odds_api/resources/stats.rbi +1 -0
  44. data/rbi/sports_odds_api/resources/stream.rbi +1 -0
  45. data/rbi/sports_odds_api/resources/teams.rbi +3 -2
  46. data/sig/sports_odds_api/client.rbs +2 -0
  47. data/sig/sports_odds_api/internal/util.rbs +14 -0
  48. data/sig/sports_odds_api/models/event.rbs +246 -3
  49. data/sig/sports_odds_api/models/event_get_params.rbs +14 -0
  50. data/sig/sports_odds_api/models/market.rbs +186 -0
  51. data/sig/sports_odds_api/models/market_get_params.rbs +133 -0
  52. data/sig/sports_odds_api/models/team.rbs +130 -3
  53. data/sig/sports_odds_api/models.rbs +4 -0
  54. data/sig/sports_odds_api/resources/events.rbs +2 -0
  55. data/sig/sports_odds_api/resources/markets.rbs +27 -0
  56. metadata +39 -2
@@ -56,6 +56,7 @@ module SportsOddsAPI
56
56
  end
57
57
  attr_writer :players
58
58
 
59
+ # Nested results in the format `{periodID}.{statEntityID}.{statID} → number`.
59
60
  sig do
60
61
  returns(
61
62
  T.nilable(T::Hash[Symbol, T::Hash[Symbol, T::Hash[Symbol, Float]]])
@@ -118,6 +119,7 @@ module SportsOddsAPI
118
119
  manual: nil,
119
120
  odds: nil,
120
121
  players: nil,
122
+ # Nested results in the format `{periodID}.{statEntityID}.{statID} → number`.
121
123
  results: nil,
122
124
  sport_id: nil,
123
125
  status: nil,
@@ -183,19 +185,290 @@ module SportsOddsAPI
183
185
  T.any(SportsOddsAPI::Event::Info, SportsOddsAPI::Internal::AnyHash)
184
186
  end
185
187
 
188
+ sig do
189
+ returns(T.nilable(T::Array[SportsOddsAPI::Event::Info::Broadcast]))
190
+ end
191
+ attr_reader :broadcasts
192
+
193
+ sig do
194
+ params(
195
+ broadcasts: T::Array[SportsOddsAPI::Event::Info::Broadcast::OrHash]
196
+ ).void
197
+ end
198
+ attr_writer :broadcasts
199
+
200
+ sig { returns(T.nilable(SportsOddsAPI::Event::Info::Referee)) }
201
+ attr_reader :referee
202
+
203
+ sig do
204
+ params(referee: SportsOddsAPI::Event::Info::Referee::OrHash).void
205
+ end
206
+ attr_writer :referee
207
+
186
208
  sig { returns(T.nilable(String)) }
187
209
  attr_reader :season_week
188
210
 
189
211
  sig { params(season_week: String).void }
190
212
  attr_writer :season_week
191
213
 
192
- sig { params(season_week: String).returns(T.attached_class) }
193
- def self.new(season_week: nil)
214
+ sig { returns(T.nilable(SportsOddsAPI::Event::Info::Venue)) }
215
+ attr_reader :venue
216
+
217
+ sig { params(venue: SportsOddsAPI::Event::Info::Venue::OrHash).void }
218
+ attr_writer :venue
219
+
220
+ sig do
221
+ params(
222
+ broadcasts: T::Array[SportsOddsAPI::Event::Info::Broadcast::OrHash],
223
+ referee: SportsOddsAPI::Event::Info::Referee::OrHash,
224
+ season_week: String,
225
+ venue: SportsOddsAPI::Event::Info::Venue::OrHash
226
+ ).returns(T.attached_class)
227
+ end
228
+ def self.new(
229
+ broadcasts: nil,
230
+ referee: nil,
231
+ season_week: nil,
232
+ venue: nil
233
+ )
194
234
  end
195
235
 
196
- sig { override.returns({ season_week: String }) }
236
+ sig do
237
+ override.returns(
238
+ {
239
+ broadcasts: T::Array[SportsOddsAPI::Event::Info::Broadcast],
240
+ referee: SportsOddsAPI::Event::Info::Referee,
241
+ season_week: String,
242
+ venue: SportsOddsAPI::Event::Info::Venue
243
+ }
244
+ )
245
+ end
197
246
  def to_hash
198
247
  end
248
+
249
+ class Broadcast < SportsOddsAPI::Internal::Type::BaseModel
250
+ OrHash =
251
+ T.type_alias do
252
+ T.any(
253
+ SportsOddsAPI::Event::Info::Broadcast,
254
+ SportsOddsAPI::Internal::AnyHash
255
+ )
256
+ end
257
+
258
+ sig { returns(T.nilable(String)) }
259
+ attr_reader :broadcaster_id
260
+
261
+ sig { params(broadcaster_id: String).void }
262
+ attr_writer :broadcaster_id
263
+
264
+ sig { returns(T.nilable(String)) }
265
+ attr_reader :name
266
+
267
+ sig { params(name: String).void }
268
+ attr_writer :name
269
+
270
+ sig do
271
+ returns(
272
+ T.nilable(
273
+ SportsOddsAPI::Event::Info::Broadcast::Type::TaggedSymbol
274
+ )
275
+ )
276
+ end
277
+ attr_reader :type
278
+
279
+ sig do
280
+ params(
281
+ type: SportsOddsAPI::Event::Info::Broadcast::Type::OrSymbol
282
+ ).void
283
+ end
284
+ attr_writer :type
285
+
286
+ sig do
287
+ params(
288
+ broadcaster_id: String,
289
+ name: String,
290
+ type: SportsOddsAPI::Event::Info::Broadcast::Type::OrSymbol
291
+ ).returns(T.attached_class)
292
+ end
293
+ def self.new(broadcaster_id: nil, name: nil, type: nil)
294
+ end
295
+
296
+ sig do
297
+ override.returns(
298
+ {
299
+ broadcaster_id: String,
300
+ name: String,
301
+ type: SportsOddsAPI::Event::Info::Broadcast::Type::TaggedSymbol
302
+ }
303
+ )
304
+ end
305
+ def to_hash
306
+ end
307
+
308
+ module Type
309
+ extend SportsOddsAPI::Internal::Type::Enum
310
+
311
+ TaggedSymbol =
312
+ T.type_alias do
313
+ T.all(Symbol, SportsOddsAPI::Event::Info::Broadcast::Type)
314
+ end
315
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
316
+
317
+ TV =
318
+ T.let(
319
+ :tv,
320
+ SportsOddsAPI::Event::Info::Broadcast::Type::TaggedSymbol
321
+ )
322
+ WEBSTREAM =
323
+ T.let(
324
+ :webstream,
325
+ SportsOddsAPI::Event::Info::Broadcast::Type::TaggedSymbol
326
+ )
327
+ SUBSCRIPTION =
328
+ T.let(
329
+ :subscription,
330
+ SportsOddsAPI::Event::Info::Broadcast::Type::TaggedSymbol
331
+ )
332
+ SPORTSBOOK =
333
+ T.let(
334
+ :sportsbook,
335
+ SportsOddsAPI::Event::Info::Broadcast::Type::TaggedSymbol
336
+ )
337
+
338
+ sig do
339
+ override.returns(
340
+ T::Array[
341
+ SportsOddsAPI::Event::Info::Broadcast::Type::TaggedSymbol
342
+ ]
343
+ )
344
+ end
345
+ def self.values
346
+ end
347
+ end
348
+ end
349
+
350
+ class Referee < SportsOddsAPI::Internal::Type::BaseModel
351
+ OrHash =
352
+ T.type_alias do
353
+ T.any(
354
+ SportsOddsAPI::Event::Info::Referee,
355
+ SportsOddsAPI::Internal::AnyHash
356
+ )
357
+ end
358
+
359
+ sig { returns(T.nilable(String)) }
360
+ attr_reader :name
361
+
362
+ sig { params(name: String).void }
363
+ attr_writer :name
364
+
365
+ sig { params(name: String).returns(T.attached_class) }
366
+ def self.new(name: nil)
367
+ end
368
+
369
+ sig { override.returns({ name: String }) }
370
+ def to_hash
371
+ end
372
+ end
373
+
374
+ class Venue < SportsOddsAPI::Internal::Type::BaseModel
375
+ OrHash =
376
+ T.type_alias do
377
+ T.any(
378
+ SportsOddsAPI::Event::Info::Venue,
379
+ SportsOddsAPI::Internal::AnyHash
380
+ )
381
+ end
382
+
383
+ sig { returns(T.nilable(String)) }
384
+ attr_reader :address
385
+
386
+ sig { params(address: String).void }
387
+ attr_writer :address
388
+
389
+ sig { returns(T.nilable(Float)) }
390
+ attr_reader :capacity
391
+
392
+ sig { params(capacity: Float).void }
393
+ attr_writer :capacity
394
+
395
+ sig { returns(T.nilable(String)) }
396
+ attr_reader :city
397
+
398
+ sig { params(city: String).void }
399
+ attr_writer :city
400
+
401
+ sig { returns(T.nilable(String)) }
402
+ attr_reader :country_code
403
+
404
+ sig { params(country_code: String).void }
405
+ attr_writer :country_code
406
+
407
+ sig { returns(T.nilable(String)) }
408
+ attr_reader :country_name
409
+
410
+ sig { params(country_name: String).void }
411
+ attr_writer :country_name
412
+
413
+ sig { returns(T.nilable(String)) }
414
+ attr_reader :name
415
+
416
+ sig { params(name: String).void }
417
+ attr_writer :name
418
+
419
+ sig { returns(T.nilable(String)) }
420
+ attr_reader :region_code
421
+
422
+ sig { params(region_code: String).void }
423
+ attr_writer :region_code
424
+
425
+ sig { returns(T.nilable(String)) }
426
+ attr_reader :region_name
427
+
428
+ sig { params(region_name: String).void }
429
+ attr_writer :region_name
430
+
431
+ sig do
432
+ params(
433
+ address: String,
434
+ capacity: Float,
435
+ city: String,
436
+ country_code: String,
437
+ country_name: String,
438
+ name: String,
439
+ region_code: String,
440
+ region_name: String
441
+ ).returns(T.attached_class)
442
+ end
443
+ def self.new(
444
+ address: nil,
445
+ capacity: nil,
446
+ city: nil,
447
+ country_code: nil,
448
+ country_name: nil,
449
+ name: nil,
450
+ region_code: nil,
451
+ region_name: nil
452
+ )
453
+ end
454
+
455
+ sig do
456
+ override.returns(
457
+ {
458
+ address: String,
459
+ capacity: Float,
460
+ city: String,
461
+ country_code: String,
462
+ country_name: String,
463
+ name: String,
464
+ region_code: String,
465
+ region_name: String
466
+ }
467
+ )
468
+ end
469
+ def to_hash
470
+ end
471
+ end
199
472
  end
200
473
 
201
474
  class Odd < SportsOddsAPI::Internal::Type::BaseModel
@@ -460,6 +733,24 @@ module SportsOddsAPI
460
733
  sig { params(bookmaker_id: String).void }
461
734
  attr_writer :bookmaker_id
462
735
 
736
+ sig { returns(T.nilable(String)) }
737
+ attr_reader :close_odds
738
+
739
+ sig { params(close_odds: String).void }
740
+ attr_writer :close_odds
741
+
742
+ sig { returns(T.nilable(String)) }
743
+ attr_reader :close_over_under
744
+
745
+ sig { params(close_over_under: String).void }
746
+ attr_writer :close_over_under
747
+
748
+ sig { returns(T.nilable(String)) }
749
+ attr_reader :close_spread
750
+
751
+ sig { params(close_spread: String).void }
752
+ attr_writer :close_spread
753
+
463
754
  sig { returns(T.nilable(T::Boolean)) }
464
755
  attr_reader :is_main_line
465
756
 
@@ -478,6 +769,24 @@ module SportsOddsAPI
478
769
  sig { params(odds: String).void }
479
770
  attr_writer :odds
480
771
 
772
+ sig { returns(T.nilable(String)) }
773
+ attr_reader :open_odds
774
+
775
+ sig { params(open_odds: String).void }
776
+ attr_writer :open_odds
777
+
778
+ sig { returns(T.nilable(String)) }
779
+ attr_reader :open_over_under
780
+
781
+ sig { params(open_over_under: String).void }
782
+ attr_writer :open_over_under
783
+
784
+ sig { returns(T.nilable(String)) }
785
+ attr_reader :open_spread
786
+
787
+ sig { params(open_spread: String).void }
788
+ attr_writer :open_spread
789
+
481
790
  sig { returns(T.nilable(String)) }
482
791
  attr_reader :over_under
483
792
 
@@ -494,9 +803,15 @@ module SportsOddsAPI
494
803
  params(
495
804
  available: T::Boolean,
496
805
  bookmaker_id: String,
806
+ close_odds: String,
807
+ close_over_under: String,
808
+ close_spread: String,
497
809
  is_main_line: T::Boolean,
498
810
  last_updated_at: Time,
499
811
  odds: String,
812
+ open_odds: String,
813
+ open_over_under: String,
814
+ open_spread: String,
500
815
  over_under: String,
501
816
  spread: String
502
817
  ).returns(T.attached_class)
@@ -504,9 +819,15 @@ module SportsOddsAPI
504
819
  def self.new(
505
820
  available: nil,
506
821
  bookmaker_id: nil,
822
+ close_odds: nil,
823
+ close_over_under: nil,
824
+ close_spread: nil,
507
825
  is_main_line: nil,
508
826
  last_updated_at: nil,
509
827
  odds: nil,
828
+ open_odds: nil,
829
+ open_over_under: nil,
830
+ open_spread: nil,
510
831
  over_under: nil,
511
832
  spread: nil
512
833
  )
@@ -517,9 +838,15 @@ module SportsOddsAPI
517
838
  {
518
839
  available: T::Boolean,
519
840
  bookmaker_id: String,
841
+ close_odds: String,
842
+ close_over_under: String,
843
+ close_spread: String,
520
844
  is_main_line: T::Boolean,
521
845
  last_updated_at: Time,
522
846
  odds: String,
847
+ open_odds: String,
848
+ open_over_under: String,
849
+ open_spread: String,
523
850
  over_under: String,
524
851
  spread: String
525
852
  }
@@ -575,6 +902,22 @@ module SportsOddsAPI
575
902
  sig { params(player_id: String).void }
576
903
  attr_writer :player_id
577
904
 
905
+ sig do
906
+ returns(T.nilable(SportsOddsAPI::Event::Player::Status::TaggedSymbol))
907
+ end
908
+ attr_reader :status
909
+
910
+ sig do
911
+ params(status: SportsOddsAPI::Event::Player::Status::OrSymbol).void
912
+ end
913
+ attr_writer :status
914
+
915
+ sig { returns(T.nilable(String)) }
916
+ attr_reader :status_details
917
+
918
+ sig { params(status_details: String).void }
919
+ attr_writer :status_details
920
+
578
921
  sig { returns(T.nilable(String)) }
579
922
  attr_reader :team_id
580
923
 
@@ -589,6 +932,8 @@ module SportsOddsAPI
589
932
  name: String,
590
933
  photo: String,
591
934
  player_id: String,
935
+ status: SportsOddsAPI::Event::Player::Status::OrSymbol,
936
+ status_details: String,
592
937
  team_id: String
593
938
  ).returns(T.attached_class)
594
939
  end
@@ -599,6 +944,8 @@ module SportsOddsAPI
599
944
  name: nil,
600
945
  photo: nil,
601
946
  player_id: nil,
947
+ status: nil,
948
+ status_details: nil,
602
949
  team_id: nil
603
950
  )
604
951
  end
@@ -612,12 +959,49 @@ module SportsOddsAPI
612
959
  name: String,
613
960
  photo: String,
614
961
  player_id: String,
962
+ status: SportsOddsAPI::Event::Player::Status::TaggedSymbol,
963
+ status_details: String,
615
964
  team_id: String
616
965
  }
617
966
  )
618
967
  end
619
968
  def to_hash
620
969
  end
970
+
971
+ module Status
972
+ extend SportsOddsAPI::Internal::Type::Enum
973
+
974
+ TaggedSymbol =
975
+ T.type_alias { T.all(Symbol, SportsOddsAPI::Event::Player::Status) }
976
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
977
+
978
+ IR = T.let(:ir, SportsOddsAPI::Event::Player::Status::TaggedSymbol)
979
+ ACTIVE =
980
+ T.let(:active, SportsOddsAPI::Event::Player::Status::TaggedSymbol)
981
+ OUT = T.let(:out, SportsOddsAPI::Event::Player::Status::TaggedSymbol)
982
+ SUSPENDED =
983
+ T.let(
984
+ :suspended,
985
+ SportsOddsAPI::Event::Player::Status::TaggedSymbol
986
+ )
987
+ QUESTIONABLE =
988
+ T.let(
989
+ :questionable,
990
+ SportsOddsAPI::Event::Player::Status::TaggedSymbol
991
+ )
992
+ DOUBTFUL =
993
+ T.let(:doubtful, SportsOddsAPI::Event::Player::Status::TaggedSymbol)
994
+ PROBABLE =
995
+ T.let(:probable, SportsOddsAPI::Event::Player::Status::TaggedSymbol)
996
+
997
+ sig do
998
+ override.returns(
999
+ T::Array[SportsOddsAPI::Event::Player::Status::TaggedSymbol]
1000
+ )
1001
+ end
1002
+ def self.values
1003
+ end
1004
+ end
621
1005
  end
622
1006
 
623
1007
  class Status < SportsOddsAPI::Internal::Type::BaseModel
@@ -26,8 +26,8 @@ module SportsOddsAPI
26
26
  sig { params(cancelled: T::Boolean).void }
27
27
  attr_writer :cancelled
28
28
 
29
- # The cursor for the request. Used to get the next group of Events. This should be
30
- # the nextCursor from the prior response.
29
+ # The cursor for the request. Used to get the next group of Events. This is an
30
+ # opaque token — pass the nextCursor value from the prior response unchanged.
31
31
  sig { returns(T.nilable(String)) }
32
32
  attr_reader :cursor
33
33
 
@@ -56,6 +56,14 @@ module SportsOddsAPI
56
56
  sig { params(event_ids: String).void }
57
57
  attr_writer :event_ids
58
58
 
59
+ # Whether to expand the results object to include all stat values rather than just
60
+ # the base set
61
+ sig { returns(T.nilable(T::Boolean)) }
62
+ attr_reader :expand_results
63
+
64
+ sig { params(expand_results: T::Boolean).void }
65
+ attr_writer :expand_results
66
+
59
67
  # Only include finalized Events (true), exclude unfinalized Events (false) or all
60
68
  # Events (omit)
61
69
  sig { returns(T.nilable(T::Boolean)) }
@@ -71,6 +79,14 @@ module SportsOddsAPI
71
79
  sig { params(include_alt_lines: T::Boolean).void }
72
80
  attr_writer :include_alt_lines
73
81
 
82
+ # Whether to include open and close odds values (openOdds, closeOdds, openSpread,
83
+ # closeSpread, openOverUnder, closeOverUnder) in the odds byBookmaker data
84
+ sig { returns(T.nilable(T::Boolean)) }
85
+ attr_reader :include_open_close_odds
86
+
87
+ sig { params(include_open_close_odds: T::Boolean).void }
88
+ attr_writer :include_open_close_odds
89
+
74
90
  # Whether to include opposing odds for each included oddID
75
91
  sig { returns(T.nilable(T::Boolean)) }
76
92
  attr_reader :include_opposing_odds
@@ -183,8 +199,10 @@ module SportsOddsAPI
183
199
  ended: T::Boolean,
184
200
  event_id: String,
185
201
  event_ids: String,
202
+ expand_results: T::Boolean,
186
203
  finalized: T::Boolean,
187
204
  include_alt_lines: T::Boolean,
205
+ include_open_close_odds: T::Boolean,
188
206
  include_opposing_odds: T::Boolean,
189
207
  league_id: String,
190
208
  limit: Float,
@@ -208,8 +226,8 @@ module SportsOddsAPI
208
226
  # Only include cancelled Events (true), only non-cancelled Events (false) or all
209
227
  # Events (omit)
210
228
  cancelled: nil,
211
- # The cursor for the request. Used to get the next group of Events. This should be
212
- # the nextCursor from the prior response.
229
+ # The cursor for the request. Used to get the next group of Events. This is an
230
+ # opaque token — pass the nextCursor value from the prior response unchanged.
213
231
  cursor: nil,
214
232
  # Only include Events which have have ended (true), only Events which have not
215
233
  # ended (false) or all Events (omit)
@@ -218,11 +236,17 @@ module SportsOddsAPI
218
236
  event_id: nil,
219
237
  # A comma separated list of eventIDs to get Event data for
220
238
  event_ids: nil,
239
+ # Whether to expand the results object to include all stat values rather than just
240
+ # the base set
241
+ expand_results: nil,
221
242
  # Only include finalized Events (true), exclude unfinalized Events (false) or all
222
243
  # Events (omit)
223
244
  finalized: nil,
224
245
  # Whether to include alternate lines in the odds byBookmaker data
225
246
  include_alt_lines: nil,
247
+ # Whether to include open and close odds values (openOdds, closeOdds, openSpread,
248
+ # closeSpread, openOverUnder, closeOverUnder) in the odds byBookmaker data
249
+ include_open_close_odds: nil,
226
250
  # Whether to include opposing odds for each included oddID
227
251
  include_opposing_odds: nil,
228
252
  # A leagueID or comma-separated list of leagueIDs to get Events for
@@ -270,8 +294,10 @@ module SportsOddsAPI
270
294
  ended: T::Boolean,
271
295
  event_id: String,
272
296
  event_ids: String,
297
+ expand_results: T::Boolean,
273
298
  finalized: T::Boolean,
274
299
  include_alt_lines: T::Boolean,
300
+ include_open_close_odds: T::Boolean,
275
301
  include_opposing_odds: T::Boolean,
276
302
  league_id: String,
277
303
  limit: Float,