polymarket-apis 0.3.0__py3-none-any.whl → 0.3.9__py3-none-any.whl

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.

Potentially problematic release.


This version of polymarket-apis might be problematic. Click here for more details.

Files changed (32) hide show
  1. polymarket_apis/__init__.py +42 -0
  2. polymarket_apis/clients/__init__.py +23 -0
  3. polymarket_apis/clients/clob_client.py +224 -117
  4. polymarket_apis/clients/data_client.py +220 -67
  5. polymarket_apis/clients/gamma_client.py +589 -101
  6. polymarket_apis/clients/graphql_client.py +28 -11
  7. polymarket_apis/clients/web3_client.py +538 -131
  8. polymarket_apis/clients/websockets_client.py +24 -7
  9. polymarket_apis/types/__init__.py +167 -0
  10. polymarket_apis/types/clob_types.py +35 -14
  11. polymarket_apis/types/common.py +105 -35
  12. polymarket_apis/types/data_types.py +48 -3
  13. polymarket_apis/types/gamma_types.py +529 -257
  14. polymarket_apis/types/web3_types.py +45 -0
  15. polymarket_apis/types/websockets_types.py +92 -41
  16. polymarket_apis/utilities/config.py +1 -0
  17. polymarket_apis/utilities/constants.py +5 -4
  18. polymarket_apis/utilities/exceptions.py +9 -0
  19. polymarket_apis/utilities/order_builder/builder.py +38 -22
  20. polymarket_apis/utilities/order_builder/helpers.py +0 -1
  21. polymarket_apis/utilities/signing/hmac.py +5 -1
  22. polymarket_apis/utilities/signing/signer.py +2 -2
  23. polymarket_apis/utilities/web3/abis/Safe.json +1138 -0
  24. polymarket_apis/utilities/web3/abis/SafeProxyFactory.json +224 -0
  25. polymarket_apis/utilities/web3/abis/custom_contract_errors.py +1 -1
  26. polymarket_apis/utilities/web3/helpers.py +235 -0
  27. {polymarket_apis-0.3.0.dist-info → polymarket_apis-0.3.9.dist-info}/METADATA +48 -8
  28. polymarket_apis-0.3.9.dist-info/RECORD +44 -0
  29. polymarket_apis/utilities/schemas/activity-subgraph.graphql +0 -86
  30. polymarket_apis/utilities/schemas/open-interest.graphql +0 -30
  31. polymarket_apis-0.3.0.dist-info/RECORD +0 -43
  32. {polymarket_apis-0.3.0.dist-info → polymarket_apis-0.3.9.dist-info}/WHEEL +0 -0
@@ -1,10 +1,11 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from datetime import datetime
4
- from typing import Optional
4
+ from typing import Literal, Optional
5
5
 
6
6
  from pydantic import (
7
7
  BaseModel,
8
+ ConfigDict,
8
9
  Field,
9
10
  Json,
10
11
  ValidationInfo,
@@ -12,169 +13,198 @@ from pydantic import (
12
13
  field_validator,
13
14
  )
14
15
 
15
- from .common import EthAddress, Keccak256, TimestampWithTZ
16
+ from .common import EthAddress, FlexibleDatetime, Keccak256
16
17
 
17
18
 
18
- class Event(BaseModel):
19
- # Identifiers
20
- id: str
21
- slug: str
22
- ticker: Optional[str] = None
23
-
24
- # Core event information
25
- title: str
26
- description: Optional[str] = None
27
- resolution_source: Optional[str] = Field(None, alias="resolutionSource")
28
- category: Optional[str] = None
29
-
30
- # Media URLs
31
- image: Optional[str] = None
32
- icon: Optional[str] = None
33
-
34
- # Datetime
35
- start_date: Optional[datetime] = Field(None, alias="startDate")
36
- end_date: Optional[datetime] = Field(None, alias="endDate")
37
- creation_date: Optional[datetime] = Field(None, alias="creationDate")
38
- created_at: Optional[datetime] = Field(alias="createdAt")
39
- updated_at: Optional[datetime] = Field(None, alias="updatedAt")
40
- published_at: Optional[datetime] = Field(None, alias="publishedAt")
41
- closed_time: Optional[datetime] = Field(None, alias="closedTime")
42
-
43
- # Status flags
44
- active: bool
45
- closed: bool
46
- archived: Optional[bool] = None
47
- new: Optional[bool] = None
48
- featured: Optional[bool] = None
49
- restricted: Optional[bool] = None
50
- cyom: bool
51
- automatically_active: Optional[bool] = Field(None, alias="automaticallyActive")
52
-
53
- # Financial metrics
54
- liquidity: Optional[float] = None
55
- volume: Optional[float] = None
56
- open_interest: Optional[int] = Field(None, alias="openInterest")
57
- competitive: Optional[float] = None
58
- volume_24hr: Optional[float] = Field(None, alias="volume24hr")
59
- liquidity_amm: Optional[float] = Field(None, alias="liquidityAmm")
60
- liquidity_clob: Optional[float] = Field(None, alias="liquidityClob")
61
-
62
- # Related data
63
- markets: Optional[list[GammaMarket]] = None
64
- series: Optional[list[Series]] = None
65
- tags: Optional[list[Tag]] = None
19
+ class OptimizedImage(BaseModel):
20
+ """Optimized image data."""
66
21
 
67
- # User interaction
68
- comment_count: Optional[int] = Field(None, alias="commentCount")
22
+ model_config = ConfigDict(populate_by_name=True)
69
23
 
70
- # Display and functionality settings
71
- sort_by: Optional[str] = Field(None, alias="sortBy")
72
- show_all_outcomes: bool = Field(alias="showAllOutcomes")
73
- show_market_images: bool = Field(alias="showMarketImages")
74
- gmp_chart_mode: Optional[str] = Field(None, alias="gmpChartMode")
24
+ id: Optional[str] = Field(None, alias="id")
25
+ image_url_source: Optional[str] = Field(None, alias="imageUrlSource")
26
+ image_url_optimized: Optional[str] = Field(None, alias="imageUrlOptimized")
27
+ image_size_kb_source: Optional[int] = Field(None, alias="imageSizeKbSource")
28
+ image_size_kb_optimized: Optional[int] = Field(None, alias="imageSizeKbOptimized")
29
+ image_optimized_complete: Optional[bool] = Field(
30
+ None, alias="imageOptimizedComplete"
31
+ )
32
+ image_optimized_last_updated: Optional[str] = Field(
33
+ None, alias="imageOptimizedLastUpdated"
34
+ )
35
+ rel_id: Optional[int] = Field(None, alias="relID")
36
+ field: Optional[str] = Field(None, alias="field")
37
+ relname: Optional[str] = Field(None, alias="relname")
75
38
 
76
- # Negative risk settings
77
- enable_neg_risk: bool = Field(alias="enableNegRisk")
78
- neg_risk: Optional[bool] = Field(None, alias="negRisk")
79
- neg_risk_market_id: Optional[str] = Field(None, alias="negRiskMarketID")
80
- neg_risk_augmented: Optional[bool] = Field(None, alias="negRiskAugmented")
81
39
 
82
- # Order book settings
83
- enable_order_book: Optional[bool] = Field(None, alias="enableOrderBook")
40
+ class GammaMarket(BaseModel):
41
+ """Market model."""
84
42
 
43
+ model_config = ConfigDict(populate_by_name=True)
85
44
 
86
- class GammaMarket(BaseModel):
87
- # Identifiers
88
- id: str
89
- slug: str
90
- condition_id: Keccak256 = Field(alias="conditionId")
45
+ id: Optional[str] = Field(None, alias="id")
46
+ condition_id: Optional[Keccak256] = Field(None, alias="conditionId")
91
47
  question_id: Optional[Keccak256] = Field(None, alias="questionID")
92
-
93
- # Core market information
94
- question: str
95
- description: str
48
+ slug: Optional[str] = Field(None, alias="slug")
49
+ question: Optional[str] = Field(None, alias="question")
50
+ twitter_card_image: Optional[str] = Field(None, alias="twitterCardImage")
96
51
  resolution_source: Optional[str] = Field(None, alias="resolutionSource")
97
- outcome: Optional[list] = None
98
- outcome_prices: Optional[Json[list[float]] | list[float]] = Field(None, alias="outcomePrices")
99
-
100
- # Media URLs
101
- image: Optional[str] = None
102
- icon: Optional[str] = None
103
-
104
- # Datetime
105
- start_date: Optional[datetime] = Field(None, alias="startDate")
106
52
  end_date: Optional[datetime] = Field(None, alias="endDate")
107
- created_at: datetime = Field(alias="createdAt")
53
+ category: Optional[str] = Field(None, alias="category")
54
+ amm_type: Optional[str] = Field(None, alias="ammType")
55
+ liquidity: Optional[float] = Field(None, alias="liquidity")
56
+ sponsor_name: Optional[str] = Field(None, alias="sponsorName")
57
+ sponsor_image: Optional[str] = Field(None, alias="sponsorImage")
58
+ start_date: Optional[datetime] = Field(None, alias="startDate")
59
+ x_axis_value: Optional[str] = Field(None, alias="xAxisValue")
60
+ y_axis_value: Optional[str] = Field(None, alias="yAxisValue")
61
+ denomination_token: Optional[str] = Field(None, alias="denominationToken")
62
+ fee: Optional[str] = Field(None, alias="fee")
63
+ image: Optional[str] = Field(None, alias="image")
64
+ icon: Optional[str] = Field(None, alias="icon")
65
+ lower_bound: Optional[str] = Field(None, alias="lowerBound")
66
+ upper_bound: Optional[str] = Field(None, alias="upperBound")
67
+ description: Optional[str] = Field(None, alias="description")
68
+ outcomes: Optional[str] = Field(None, alias="outcomes")
69
+ outcome_prices: Optional[Json[list[float]] | list[float]] = Field(
70
+ None, alias="outcomePrices"
71
+ )
72
+ volume: Optional[str] = Field(None, alias="volume")
73
+ active: Optional[bool] = Field(None, alias="active")
74
+ market_type: Optional[str] = Field(None, alias="marketType")
75
+ format_type: Optional[str] = Field(None, alias="formatType")
76
+ lower_bound_date: Optional[datetime] = Field(None, alias="lowerBoundDate")
77
+ upper_bound_date: Optional[datetime] = Field(None, alias="upperBoundDate")
78
+ closed: Optional[bool] = Field(None, alias="closed")
79
+ market_maker_address: Optional[str] = Field(None, alias="marketMakerAddress")
80
+ created_by: Optional[int] = Field(None, alias="createdBy")
81
+ updated_by: Optional[int] = Field(None, alias="updatedBy")
82
+ created_at: Optional[datetime] = Field(None, alias="createdAt")
108
83
  updated_at: Optional[datetime] = Field(None, alias="updatedAt")
109
- start_date_iso: Optional[datetime] = Field(None, alias="startDateIso")
110
- end_date_iso: Optional[datetime] = Field(None, alias="endDateIso")
111
- deployed_timestamp: Optional[datetime] = Field(None, alias="deployedTimestamp")
112
- accepting_orders_timestamp: Optional[datetime] = Field(None, alias="acceptingOrdersTimestamp")
113
-
114
- # Status flags
115
- active: bool
116
- closed: bool
117
- archived: bool
118
- new: Optional[bool] = None
119
- featured: Optional[bool] = None
120
- restricted: bool
121
- ready: bool
122
- deployed: Optional[bool] = None
123
- funded: bool
124
- cyom: bool
125
- approved: bool
126
-
127
- # Financial metrics
128
- liquidity: Optional[float] = None
129
- volume: Optional[float] = None
84
+ closed_time: Optional[str] = Field(None, alias="closedTime")
85
+ wide_format: Optional[bool] = Field(None, alias="wideFormat")
86
+ new: Optional[bool] = Field(None, alias="new")
87
+ mailchimp_tag: Optional[str] = Field(None, alias="mailchimpTag")
88
+ featured: Optional[bool] = Field(None, alias="featured")
89
+ archived: Optional[bool] = Field(None, alias="archived")
90
+ resolved_by: Optional[EthAddress] = Field(None, alias="resolvedBy")
91
+ restricted: Optional[bool] = Field(None, alias="restricted")
92
+ market_group: Optional[int] = Field(None, alias="marketGroup")
93
+ group_item_title: Optional[str] = Field(None, alias="groupItemTitle")
94
+ group_item_threshold: Optional[str] = Field(None, alias="groupItemThreshold")
95
+ uma_end_date: Optional[FlexibleDatetime] = Field(None, alias="umaEndDate")
96
+ enable_order_book: Optional[bool] = Field(None, alias="enableOrderBook")
97
+ order_price_min_tick_size: Optional[float] = Field(
98
+ None, alias="orderPriceMinTickSize"
99
+ )
100
+ order_min_size: Optional[float] = Field(None, alias="orderMinSize")
101
+ uma_resolution_status: Optional[str] = Field(None, alias="umaResolutionStatus")
102
+ curation_order: Optional[int] = Field(None, alias="curationOrder")
130
103
  volume_num: Optional[float] = Field(None, alias="volumeNum")
131
104
  liquidity_num: Optional[float] = Field(None, alias="liquidityNum")
105
+ end_date_iso: Optional[datetime] = Field(None, alias="endDateIso")
106
+ start_date_iso: Optional[datetime] = Field(None, alias="startDateIso")
107
+ uma_end_date_iso: Optional[datetime] = Field(None, alias="umaEndDateIso")
108
+ has_reviewed_dates: Optional[bool] = Field(None, alias="hasReviewedDates")
109
+ ready_for_cron: Optional[bool] = Field(None, alias="readyForCron")
110
+ comments_enabled: Optional[bool] = Field(None, alias="commentsEnabled")
132
111
  volume_24hr: Optional[float] = Field(None, alias="volume24hr")
112
+ volume_1wk: Optional[float] = Field(None, alias="volume1wk")
113
+ volume_1mo: Optional[float] = Field(None, alias="volume1mo")
114
+ volume_1yr: Optional[float] = Field(None, alias="volume1yr")
115
+ game_start_time: Optional[str] = Field(None, alias="gameStartTime")
116
+ seconds_delay: Optional[int] = Field(None, alias="secondsDelay")
117
+ token_ids: Optional[Json[list[str]] | list[str]] = Field(None, alias="clobTokenIds")
118
+ disqus_thread: Optional[str] = Field(None, alias="disqusThread")
119
+ short_outcomes: Optional[str] = Field(None, alias="shortOutcomes")
120
+ team_a_id: Optional[str] = Field(None, alias="teamAID")
121
+ team_b_id: Optional[str] = Field(None, alias="teamBID")
122
+ uma_bond: Optional[str] = Field(None, alias="umaBond")
123
+ uma_reward: Optional[str] = Field(None, alias="umaReward")
124
+ fpmm_live: Optional[bool] = Field(None, alias="fpmmLive")
125
+ volume_24hr_amm: Optional[float] = Field(None, alias="volume24hrAmm")
126
+ volume_1wk_amm: Optional[float] = Field(None, alias="volume1wkAmm")
127
+ volume_1mo_amm: Optional[float] = Field(None, alias="volume1moAmm")
128
+ volume_1yr_amm: Optional[float] = Field(None, alias="volume1yrAmm")
133
129
  volume_24hr_clob: Optional[float] = Field(None, alias="volume24hrClob")
130
+ volume_1wk_clob: Optional[float] = Field(None, alias="volume1wkClob")
131
+ volume_1mo_clob: Optional[float] = Field(None, alias="volume1moClob")
132
+ volume_1yr_clob: Optional[float] = Field(None, alias="volume1yrClob")
133
+ volume_amm: Optional[float] = Field(None, alias="volumeAmm")
134
134
  volume_clob: Optional[float] = Field(None, alias="volumeClob")
135
+ liquidity_amm: Optional[float] = Field(None, alias="liquidityAmm")
135
136
  liquidity_clob: Optional[float] = Field(None, alias="liquidityClob")
136
- competitive: Optional[float] = None
137
- spread: float
138
-
139
- # Order book settings
140
- enable_order_book: Optional[bool] = Field(None, alias="enableOrderBook")
141
- order_price_min_tick_size: Optional[float] = Field(
142
- None, alias="orderPriceMinTickSize",
143
- )
144
- order_min_size: Optional[float] = Field(None, alias="orderMinSize")
137
+ maker_base_fee: Optional[int] = Field(None, alias="makerBaseFee")
138
+ taker_base_fee: Optional[int] = Field(None, alias="takerBaseFee")
139
+ custom_liveness: Optional[int] = Field(None, alias="customLiveness")
145
140
  accepting_orders: Optional[bool] = Field(None, alias="acceptingOrders")
146
-
147
- # Related data
141
+ notifications_enabled: Optional[bool] = Field(None, alias="notificationsEnabled")
142
+ score: Optional[int] = Field(None, alias="score")
143
+ image_optimized: Optional[OptimizedImage] = Field(None, alias="imageOptimized")
144
+ icon_optimized: Optional[OptimizedImage] = Field(None, alias="iconOptimized")
148
145
  events: Optional[list[Event]] = None
146
+ categories: Optional[list[Category]] = Field(None, alias="categories")
147
+ tags: Optional[list[Tag]] = Field(None, alias="tags")
148
+ creator: Optional[str] = Field(None, alias="creator")
149
+ ready: Optional[bool] = Field(None, alias="ready")
150
+ funded: Optional[bool] = Field(None, alias="funded")
151
+ past_slugs: Optional[str] = Field(None, alias="pastSlugs")
152
+ ready_timestamp: Optional[datetime] = Field(None, alias="readyTimestamp")
153
+ funded_timestamp: Optional[datetime] = Field(None, alias="fundedTimestamp")
154
+ accepting_orders_timestamp: Optional[datetime] = Field(
155
+ None, alias="acceptingOrdersTimestamp"
156
+ )
157
+ competitive: Optional[float] = Field(None, alias="competitive")
158
+ rewards_min_size: Optional[float] = Field(None, alias="rewardsMinSize")
159
+ rewards_max_spread: Optional[float] = Field(None, alias="rewardsMaxSpread")
160
+ spread: Optional[float] = Field(None, alias="spread")
161
+ automatically_resolved: Optional[bool] = Field(None, alias="automaticallyResolved")
162
+ one_day_price_change: Optional[float] = Field(None, alias="oneDayPriceChange")
163
+ one_hour_price_change: Optional[float] = Field(None, alias="oneHourPriceChange")
164
+ one_week_price_change: Optional[float] = Field(None, alias="oneWeekPriceChange")
165
+ one_month_price_change: Optional[float] = Field(None, alias="oneMonthPriceChange")
166
+ one_year_price_change: Optional[float] = Field(None, alias="oneYearPriceChange")
167
+ last_trade_price: Optional[float] = Field(None, alias="lastTradePrice")
168
+ best_bid: Optional[float] = Field(None, alias="bestBid")
169
+ best_ask: Optional[float] = Field(None, alias="bestAsk")
170
+ automatically_active: Optional[bool] = Field(None, alias="automaticallyActive")
171
+ clear_book_on_start: Optional[bool] = Field(None, alias="clearBookOnStart")
172
+ chart_color: Optional[str] = Field(None, alias="chartColor")
173
+ series_color: Optional[str] = Field(None, alias="seriesColor")
174
+ show_gmp_series: Optional[bool] = Field(None, alias="showGmpSeries")
175
+ show_gmp_outcome: Optional[bool] = Field(None, alias="showGmpOutcome")
176
+ manual_activation: Optional[bool] = Field(None, alias="manualActivation")
177
+ neg_risk_other: Optional[bool] = Field(None, alias="negRiskOther")
178
+ game_id: Optional[str] = Field(None, alias="gameId")
179
+ group_item_range: Optional[str] = Field(None, alias="groupItemRange")
180
+ sports_market_type: Optional[str] = Field(None, alias="sportsMarketType")
181
+ line: Optional[float] = Field(None, alias="line")
182
+ uma_resolution_statuses: Optional[str] = Field(None, alias="umaResolutionStatuses")
183
+ pending_deployment: Optional[bool] = Field(None, alias="pendingDeployment")
184
+ deploying: Optional[bool] = Field(None, alias="deploying")
185
+ deploying_timestamp: Optional[datetime] = Field(None, alias="deployingTimestamp")
186
+ scheduled_deployment_timestamp: Optional[datetime] = Field(
187
+ None, alias="scheduledDeploymentTimestamp"
188
+ )
189
+ rfq_enabled: Optional[bool] = Field(None, alias="rfqEnabled")
190
+ event_start_time: Optional[datetime] = Field(None, alias="eventStartTime")
149
191
  clob_rewards: Optional[list[ClobReward]] = Field(None, alias="clobRewards")
150
-
151
- # User interaction
152
- comment_count: Optional[int] = Field(None, alias="commentCount")
153
-
154
- # Market maker information
155
- market_maker_address: str = Field(alias="marketMakerAddress")
156
-
157
- # Additional settings
158
- group_item_title: Optional[str] = Field(None, alias="groupItemTitle")
159
- group_item_threshold: Optional[int] = Field(None, alias="groupItemThreshold")
160
- token_ids: Optional[Json[list[str]] | list[str]] = Field(None, alias="clobTokenIds")
161
- uma_bond: Optional[int] = Field(None, alias="umaBond")
162
- uma_reward: Optional[float] = Field(None, alias="umaReward")
163
- neg_risk: Optional[bool] = Field(None, alias="negRisk")
164
- pager_duty_notification_enabled: bool = Field(alias="pagerDutyNotificationEnabled")
165
- review_status: Optional[str] = Field(None, alias="reviewStatus")
166
- rewards_min_size: int = Field(alias="rewardsMinSize")
167
- rewards_max_spread: float = Field(alias="rewardsMaxSpread")
168
-
169
- # Resolution information
170
192
  submitted_by: Optional[str] = None
171
- resolved_by: Optional[EthAddress] = Field(None, alias="resolvedBy")
172
- has_reviewed_dates: Optional[bool] = Field(None, alias="hasReviewedDates")
193
+ approved: Optional[bool] = None
194
+ pager_duty_notification_enabled: Optional[bool] = Field(
195
+ None, alias="pagerDutyNotificationEnabled"
196
+ )
197
+ holding_rewards_enabled: Optional[bool] = Field(None, alias="holdingRewardsEnabled")
198
+ fees_enabled: Optional[bool] = Field(None, alias="feesEnabled")
199
+ cyom: Optional[bool] = Field(None, alias="cyom")
173
200
 
174
201
  @field_validator("condition_id", mode="wrap")
175
202
  @classmethod
176
203
  def validate_condition_id(
177
- cls, value: str, handler: ValidatorFunctionWrapHandler, info: ValidationInfo,
204
+ cls,
205
+ value: str,
206
+ handler: ValidatorFunctionWrapHandler,
207
+ info: ValidationInfo,
178
208
  ) -> str:
179
209
  try:
180
210
  # First attempt standard Keccak256 validation
@@ -189,166 +219,408 @@ class GammaMarket(BaseModel):
189
219
  # Re-raise original error for other cases
190
220
  raise
191
221
 
192
- class ClobReward(BaseModel):
193
- # Identifiers
194
- id: str
195
- condition_id: Keccak256 = Field(alias="conditionId")
196
222
 
197
- # Reward information
198
- asset_address: str = Field(alias="assetAddress")
199
- rewards_amount: float = Field(alias="rewardsAmount")
200
- rewards_daily_rate: Optional[float] = Field(None, alias="rewardsDailyRate")
223
+ class Series(BaseModel):
224
+ """Series model."""
225
+
226
+ model_config = ConfigDict(populate_by_name=True)
227
+
228
+ id: Optional[str] = Field(None, alias="id")
229
+ ticker: Optional[str] = Field(None, alias="ticker")
230
+ slug: Optional[str] = Field(None, alias="slug")
231
+ title: Optional[str] = Field(None, alias="title")
232
+ subtitle: Optional[str] = Field(None, alias="subtitle")
233
+ series_type: Optional[str] = Field(None, alias="seriesType")
234
+ recurrence: Optional[str] = Field(None, alias="recurrence")
235
+ description: Optional[str] = Field(None, alias="description")
236
+ image: Optional[str] = Field(None, alias="image")
237
+ icon: Optional[str] = Field(None, alias="icon")
238
+ layout: Optional[str] = Field(None, alias="layout")
239
+ active: Optional[bool] = Field(None, alias="active")
240
+ closed: Optional[bool] = Field(None, alias="closed")
241
+ archived: Optional[bool] = Field(None, alias="archived")
242
+ new: Optional[bool] = Field(None, alias="new")
243
+ featured: Optional[bool] = Field(None, alias="featured")
244
+ restricted: Optional[bool] = Field(None, alias="restricted")
245
+ is_template: Optional[bool] = Field(None, alias="isTemplate")
246
+ template_variables: Optional[bool] = Field(None, alias="templateVariables")
247
+ published_at: Optional[FlexibleDatetime] = Field(None, alias="publishedAt")
248
+ created_by: Optional[str] = Field(None, alias="createdBy")
249
+ updated_by: Optional[str] = Field(None, alias="updatedBy")
250
+ created_at: Optional[datetime] = Field(None, alias="createdAt")
251
+ updated_at: Optional[datetime] = Field(None, alias="updatedAt")
252
+ comments_enabled: Optional[bool] = Field(None, alias="commentsEnabled")
253
+ competitive: Optional[str] = Field(None, alias="competitive")
254
+ volume_24hr: Optional[float] = Field(None, alias="volume24hr")
255
+ volume: Optional[float] = Field(None, alias="volume")
256
+ liquidity: Optional[float] = Field(None, alias="liquidity")
257
+ start_date: Optional[datetime] = Field(None, alias="startDate")
258
+ pyth_token_id: Optional[str] = Field(None, alias="pythTokenID")
259
+ cg_asset_name: Optional[str] = Field(None, alias="cgAssetName")
260
+ score: Optional[int] = Field(None, alias="score")
261
+ events: Optional[list[Event]] = Field(None, alias="events")
262
+ collections: Optional[list[Collection]] = Field(None, alias="collections")
263
+ categories: Optional[list[Category]] = Field(None, alias="categories")
264
+ tags: Optional[list[Tag]] = Field(None, alias="tags")
265
+ comment_count: Optional[int] = Field(None, alias="commentCount")
266
+ chats: Optional[list[Chat]] = Field(None, alias="chats")
201
267
 
202
- # Datetime
203
- start_date: datetime = Field(alias="startDate")
204
- end_date: datetime = Field(alias="endDate")
268
+
269
+ class Category(BaseModel):
270
+ """Category model."""
271
+
272
+ model_config = ConfigDict(populate_by_name=True)
273
+
274
+ id: Optional[str] = Field(None, alias="id")
275
+ label: Optional[str] = Field(None, alias="label")
276
+ parent_category: Optional[str] = Field(None, alias="parentCategory")
277
+ slug: Optional[str] = Field(None, alias="slug")
278
+ published_at: Optional[str] = Field(None, alias="publishedAt")
279
+ created_by: Optional[str] = Field(None, alias="createdBy")
280
+ updated_by: Optional[str] = Field(None, alias="updatedBy")
281
+ created_at: Optional[datetime] = Field(None, alias="createdAt")
282
+ updated_at: Optional[datetime] = Field(None, alias="updatedAt")
205
283
 
206
284
 
207
285
  class Tag(BaseModel):
208
- # Identifiers
209
- id: str
210
- label: str
211
- slug: str
286
+ """Tag model."""
287
+
288
+ model_config = ConfigDict(populate_by_name=True)
212
289
 
213
- # Display settings
290
+ id: Optional[str] = Field(None, alias="id")
291
+ label: Optional[str] = Field(None, alias="label")
292
+ slug: Optional[str] = Field(None, alias="slug")
214
293
  force_show: Optional[bool] = Field(None, alias="forceShow")
294
+ published_at: Optional[str] = Field(None, alias="publishedAt")
295
+ created_by: Optional[int] = Field(None, alias="createdBy")
296
+ updated_by: Optional[int] = Field(None, alias="updatedBy")
297
+ created_at: Optional[datetime] = Field(None, alias="createdAt")
298
+ updated_at: Optional[datetime] = Field(None, alias="updatedAt")
215
299
  force_hide: Optional[bool] = Field(None, alias="forceHide")
300
+ is_carousel: Optional[bool] = Field(None, alias="isCarousel")
301
+
302
+
303
+ class TagRelation(BaseModel):
304
+ """Tag relation model."""
305
+
306
+ model_config = ConfigDict(populate_by_name=True)
307
+
308
+ id: int = Field(alias="id")
309
+ tag_id: int = Field(alias="tagID")
310
+ related_tag_id: int = Field(alias="relatedTagID")
311
+ rank: int
312
+
313
+
314
+ class Chat(BaseModel):
315
+ """Chat model."""
316
+
317
+ model_config = ConfigDict(populate_by_name=True)
318
+
319
+ id: Optional[str] = Field(None, alias="id")
320
+ channel_id: Optional[str] = Field(None, alias="channelId")
321
+ channel_name: Optional[str] = Field(None, alias="channelName")
322
+ channel_image: Optional[str] = Field(None, alias="channelImage")
323
+ live: Optional[bool] = Field(None, alias="live")
324
+ start_time: Optional[datetime] = Field(None, alias="startTime")
325
+ end_time: Optional[datetime] = Field(None, alias="endTime")
326
+
327
+
328
+ class Collection(BaseModel):
329
+ """Collection model."""
330
+
331
+ model_config = ConfigDict(populate_by_name=True)
332
+
333
+ id: Optional[str] = Field(None, alias="id")
334
+ ticker: Optional[str] = Field(None, alias="ticker")
335
+ slug: Optional[str] = Field(None, alias="slug")
336
+ title: Optional[str] = Field(None, alias="title")
337
+ subtitle: Optional[str] = Field(None, alias="subtitle")
338
+ collection_type: Optional[str] = Field(None, alias="collectionType")
339
+ description: Optional[str] = Field(None, alias="description")
340
+ tags: Optional[str] = Field(None, alias="tags")
341
+ image: Optional[str] = Field(None, alias="image")
342
+ icon: Optional[str] = Field(None, alias="icon")
343
+ header_image: Optional[str] = Field(None, alias="headerImage")
344
+ layout: Optional[str] = Field(None, alias="layout")
345
+ active: Optional[bool] = Field(None, alias="active")
346
+ closed: Optional[bool] = Field(None, alias="closed")
347
+ archived: Optional[bool] = Field(None, alias="archived")
348
+ new: Optional[bool] = Field(None, alias="new")
349
+ featured: Optional[bool] = Field(None, alias="featured")
350
+ restricted: Optional[bool] = Field(None, alias="restricted")
351
+ is_template: Optional[bool] = Field(None, alias="isTemplate")
352
+ template_variables: Optional[str] = Field(None, alias="templateVariables")
353
+ published_at: Optional[str] = Field(None, alias="publishedAt")
354
+ created_by: Optional[str] = Field(None, alias="createdBy")
355
+ updated_by: Optional[str] = Field(None, alias="updatedBy")
356
+ created_at: Optional[datetime] = Field(None, alias="createdAt")
357
+ updated_at: Optional[datetime] = Field(None, alias="updatedAt")
358
+ comments_enabled: Optional[bool] = Field(None, alias="commentsEnabled")
359
+ image_optimized: Optional[OptimizedImage] = Field(None, alias="imageOptimized")
360
+ icon_optimized: Optional[OptimizedImage] = Field(None, alias="iconOptimized")
361
+ header_image_optimized: Optional[OptimizedImage] = Field(
362
+ None, alias="headerImageOptimized"
363
+ )
364
+
365
+
366
+ class Creator(BaseModel):
367
+ """Event Creator model."""
216
368
 
217
- # Datetime
218
- published_at: Optional[TimestampWithTZ | datetime] = Field(None, alias="publishedAt")
369
+ model_config = ConfigDict(populate_by_name=True)
370
+
371
+ id: Optional[str] = Field(None, alias="id")
372
+ creator_name: Optional[str] = Field(None, alias="creatorName")
373
+ creator_handle: Optional[str] = Field(None, alias="creatorHandle")
374
+ creator_url: Optional[str] = Field(None, alias="creatorUrl")
375
+ creator_image: Optional[str] = Field(None, alias="creatorImage")
219
376
  created_at: Optional[datetime] = Field(None, alias="createdAt")
220
377
  updated_at: Optional[datetime] = Field(None, alias="updatedAt")
221
378
 
222
- # User information
223
- created_by: Optional[int] = Field(None, alias="createdBy")
224
- updated_by: Optional[int] = Field(None, alias="updatedBy")
225
379
 
380
+ class Template(BaseModel):
381
+ """Template model."""
226
382
 
227
- class Series(BaseModel):
228
- # Identifiers
229
- id: str
230
- slug: str
231
- ticker: str
232
- title: str
383
+ model_config = ConfigDict(populate_by_name=True)
233
384
 
234
- # Series characteristics
235
- series_type: Optional[str] = Field(None, alias="seriesType")
236
- recurrence: Optional[str] = None
237
- layout: Optional[str] = None
385
+ id: Optional[str] = Field(None, alias="id")
386
+ event_title: Optional[str] = Field(None, alias="eventTitle")
387
+ event_slug: Optional[str] = Field(None, alias="eventSlug")
388
+ event_image: Optional[str] = Field(None, alias="eventImage")
389
+ market_title: Optional[str] = Field(None, alias="marketTitle")
390
+ description: Optional[str] = Field(None, alias="description")
391
+ resolution_source: Optional[str] = Field(None, alias="resolutionSource")
392
+ neg_risk: Optional[bool] = Field(None, alias="negRisk")
393
+ sort_by: Optional[str] = Field(None, alias="sortBy")
394
+ show_market_images: Optional[bool] = Field(None, alias="showMarketImages")
395
+ series_slug: Optional[str] = Field(None, alias="seriesSlug")
396
+ outcomes: Optional[str] = Field(None, alias="outcomes")
238
397
 
239
- # Media URLs
240
- icon: Optional[str] = None
241
- image: Optional[str] = None
242
398
 
243
- # Datetime
244
- start_date: Optional[datetime] = Field(None, alias="startDate")
245
- created_at: datetime = Field(alias="createdAt")
246
- updated_at: Optional[datetime] = Field(None, alias="updatedAt")
247
- published_at: Optional[TimestampWithTZ | datetime] = Field(None, alias="publishedAt")
248
-
249
- # Status flags
250
- active: Optional[bool] = None
251
- archived: Optional[bool] = None
252
- closed: Optional[bool] = None
253
- featured: Optional[bool] = None
254
- new: Optional[bool] = None
255
- restricted: Optional[bool] = None
256
-
257
- # Financial metrics
258
- liquidity: Optional[float] = None
259
- volume: Optional[float] = None
260
- volume_24hr: Optional[float] = Field(None, alias="volume24hr")
261
- competitive: Optional[str] = None
399
+ class ClobReward(BaseModel):
400
+ """Reward model."""
262
401
 
263
- # User interaction
264
- comment_count: int = Field(alias="commentCount")
265
- comments_enabled: Optional[bool] = Field(None, alias="commentsEnabled")
402
+ model_config = ConfigDict(populate_by_name=True)
266
403
 
267
- # User information
268
- created_by: Optional[str] = Field(None, alias="createdBy")
269
- updated_by: Optional[str] = Field(None, alias="updatedBy")
404
+ id: int
405
+ condition_id: Keccak256 = Field(alias="conditionId")
406
+ asset_address: str = Field(alias="assetAddress")
407
+ rewards_amount: float = Field(alias="rewardsAmount")
408
+ rewards_daily_rate: Optional[float] = Field(None, alias="rewardsDailyRate")
409
+ start_date: datetime = Field(alias="startDate")
410
+ end_date: datetime = Field(alias="endDate")
270
411
 
271
- class QueryEvent(BaseModel):
272
- # Identifiers and description
273
- id: str
274
- ticker: Optional[str] = None
275
- slug: str
276
- title: str
277
- description: Optional[str] = None
278
412
 
279
- # Datetime
280
- start_date: Optional[datetime] = Field(None, alias="startDate")
281
- creation_date: Optional[datetime] = Field(None, alias="creationDate")
282
- end_date: Optional[datetime] = Field(None, alias="endDate")
413
+ class Team(BaseModel):
414
+ """Team model."""
415
+
416
+ model_config = ConfigDict(populate_by_name=True)
417
+
418
+ id: int
419
+ name: str
420
+ league: str
421
+ record: Optional[str] = None
422
+ logo: str
423
+ abbreviation: str
424
+ alias: Optional[str] = None
283
425
  created_at: datetime = Field(alias="createdAt")
284
426
  updated_at: Optional[datetime] = Field(None, alias="updatedAt")
285
427
 
286
- # Resolution info
287
- resolution_source: Optional[str] = Field(None, alias="resolutionSource")
288
428
 
289
- # Media URLs
429
+ class Sport(BaseModel):
430
+ """Sport model."""
431
+
432
+ model_config = ConfigDict(populate_by_name=True)
433
+
434
+ sport: str
290
435
  image: Optional[str] = None
291
- icon: Optional[str] = None
436
+ resolution: Optional[str] = None
437
+ ordering: Optional[Literal["home", "away"]] = None
438
+ tags: Optional[list[int]] = None
439
+ series: Optional[int] = None
292
440
 
293
- # Status flags
294
- active: bool
295
- closed: bool
296
- archived: Optional[bool] = None
297
- new: Optional[bool] = None
298
- featured: Optional[bool] = None
299
- restricted: Optional[bool] = None
300
- automatically_active: Optional[bool] = Field(None, alias="automaticallyActive")
301
- pending_deployment: Optional[bool] = Field(None, alias="pendingDeployment")
302
- deploying: Optional[bool] = None
441
+ @field_validator("tags", mode="before")
442
+ @classmethod
443
+ def split_string_to_int_list(cls, v):
444
+ if isinstance(v, str):
445
+ return [int(i) for i in v.split(",")]
446
+ return v
303
447
 
304
- # Financial metrics
305
- liquidity: Optional[float] = None
306
- liquidity_clob: Optional[float] = Field(None, alias="liquidityClob")
307
- volume: Optional[float] = None
448
+
449
+ class Event(BaseModel):
450
+ """Event model."""
451
+
452
+ model_config = ConfigDict(populate_by_name=True)
453
+
454
+ id: int = Field(alias="id")
455
+ ticker: Optional[str] = Field(None, alias="ticker")
456
+ slug: Optional[str] = Field(None, alias="slug")
457
+ title: Optional[str] = Field(None, alias="title")
458
+ subtitle: Optional[str] = Field(None, alias="subtitle")
459
+ description: Optional[str] = Field(None, alias="description")
460
+ resolution_source: Optional[str] = Field(None, alias="resolutionSource")
461
+ start_date: Optional[datetime] = Field(None, alias="startDate")
462
+ creation_date: Optional[datetime] = Field(None, alias="creationDate")
463
+ end_date: Optional[datetime] = Field(None, alias="endDate")
464
+ image: Optional[str] = Field(None, alias="image")
465
+ icon: Optional[str] = Field(None, alias="icon")
466
+ active: Optional[bool] = Field(None, alias="active")
467
+ closed: Optional[bool] = Field(None, alias="closed")
468
+ archived: Optional[bool] = Field(None, alias="archived")
469
+ new: Optional[bool] = Field(None, alias="new")
470
+ featured: Optional[bool] = Field(None, alias="featured")
471
+ restricted: Optional[bool] = Field(None, alias="restricted")
472
+ liquidity: Optional[float] = Field(None, alias="liquidity")
473
+ volume: Optional[float] = Field(None, alias="volume")
308
474
  open_interest: Optional[int] = Field(None, alias="openInterest")
309
- competitive: Optional[float] = None
475
+ sort_by: Optional[str] = Field(None, alias="sortBy")
476
+ category: Optional[str] = Field(None, alias="category")
477
+ subcategory: Optional[str] = Field(None, alias="subcategory")
478
+ is_template: Optional[bool] = Field(None, alias="isTemplate")
479
+ template_variables: Optional[str] = Field(None, alias="templateVariables")
480
+ published_at: Optional[FlexibleDatetime] = Field(None, alias="publishedAt")
481
+ created_by: Optional[str] = Field(None, alias="createdBy")
482
+ updated_by: Optional[str] = Field(None, alias="updatedBy")
483
+ created_at: Optional[datetime] = Field(None, alias="createdAt")
484
+ updated_at: Optional[datetime] = Field(None, alias="updatedAt")
485
+ comments_enabled: Optional[bool] = Field(None, alias="commentsEnabled")
486
+ competitive: Optional[float] = Field(None, alias="competitive")
310
487
  volume_24hr: Optional[float] = Field(None, alias="volume24hr")
311
488
  volume_1wk: Optional[float] = Field(None, alias="volume1wk")
312
489
  volume_1mo: Optional[float] = Field(None, alias="volume1mo")
313
490
  volume_1yr: Optional[float] = Field(None, alias="volume1yr")
314
-
315
- # User interaction metrics
491
+ featured_image: Optional[str] = Field(None, alias="featuredImage")
492
+ disqus_thread: Optional[str] = Field(None, alias="disqusThread")
493
+ parent_event: Optional[str] = Field(None, alias="parentEvent")
494
+ enable_order_book: Optional[bool] = Field(None, alias="enableOrderBook")
495
+ liquidity_amm: Optional[float] = Field(None, alias="liquidityAmm")
496
+ liquidity_clob: Optional[float] = Field(None, alias="liquidityClob")
497
+ neg_risk: Optional[bool] = Field(None, alias="negRisk")
498
+ neg_risk_augmented: Optional[bool] = Field(None, alias="negRiskAugmented")
499
+ neg_risk_market_id: Optional[str] = Field(None, alias="negRiskMarketID")
500
+ neg_risk_fee_bips: Optional[int] = Field(None, alias="negRiskFeeBips")
316
501
  comment_count: Optional[int] = Field(None, alias="commentCount")
502
+ image_optimized: Optional[OptimizedImage] = Field(None, alias="imageOptimized")
503
+ icon_optimized: Optional[OptimizedImage] = Field(None, alias="iconOptimized")
504
+ featured_image_optimized: Optional[OptimizedImage] = Field(
505
+ None, alias="featuredImageOptimized"
506
+ )
507
+ sub_events: Optional[list[str]] = Field(None, alias="subEvents")
508
+ markets: Optional[list[GammaMarket]] = Field(None, alias="markets")
509
+ series: Optional[list[Series]] = Field(None, alias="series")
510
+ categories: Optional[list[Category]] = Field(None, alias="categories")
511
+ collections: Optional[list[Collection]] = Field(None, alias="collections")
512
+ tags: Optional[list[Tag]] = Field(None, alias="tags")
513
+ cyom: Optional[bool] = Field(None, alias="cyom")
514
+ closed_time: Optional[datetime] = Field(None, alias="closedTime")
515
+ show_all_outcomes: Optional[bool] = Field(None, alias="showAllOutcomes")
516
+ show_market_images: Optional[bool] = Field(None, alias="showMarketImages")
517
+ automatically_resolved: Optional[bool] = Field(None, alias="automaticallyResolved")
518
+ enable_neg_risk: Optional[bool] = Field(None, alias="enableNegRisk")
519
+ automatically_active: Optional[bool] = Field(None, alias="automaticallyActive")
520
+ event_date: Optional[datetime] = Field(None, alias="eventDate")
521
+ start_time: Optional[datetime] = Field(None, alias="startTime")
522
+ event_week: Optional[int] = Field(None, alias="eventWeek")
523
+ series_slug: Optional[str] = Field(None, alias="seriesSlug")
524
+ score: Optional[str] = Field(None, alias="score")
525
+ elapsed: Optional[str] = Field(None, alias="elapsed")
526
+ period: Optional[str] = Field(None, alias="period")
527
+ live: Optional[bool] = Field(None, alias="live")
528
+ ended: Optional[bool] = Field(None, alias="ended")
529
+ finished_timestamp: Optional[datetime] = Field(None, alias="finishedTimestamp")
530
+ gmp_chart_mode: Optional[str] = Field(None, alias="gmpChartMode")
531
+ event_creators: Optional[list[Creator]] = Field(None, alias="eventCreators")
532
+ tweet_count: Optional[int] = Field(None, alias="tweetCount")
533
+ chats: Optional[list[Chat]] = Field(None, alias="chats")
534
+ featured_order: Optional[int] = Field(None, alias="featuredOrder")
535
+ estimate_value: Optional[bool] = Field(None, alias="estimateValue")
536
+ cant_estimate: Optional[bool] = Field(None, alias="cantEstimate")
537
+ estimated_value: Optional[str] = Field(None, alias="estimatedValue")
538
+ templates: Optional[list[Template]] = Field(None, alias="templates")
539
+ spreads_main_line: Optional[float] = Field(None, alias="spreadsMainLine")
540
+ totals_main_line: Optional[float] = Field(None, alias="totalsMainLine")
541
+ carousel_map: Optional[str] = Field(None, alias="carouselMap")
542
+ pending_deployment: Optional[bool] = Field(None, alias="pendingDeployment")
543
+ deploying: Optional[bool] = Field(None, alias="deploying")
544
+ deploying_timestamp: Optional[datetime] = Field(None, alias="deployingTimestamp")
545
+ scheduled_deployment_timestamp: Optional[datetime] = Field(
546
+ None, alias="scheduledDeploymentTimestamp"
547
+ )
548
+ game_status: Optional[str] = Field(None, alias="gameStatus")
317
549
 
318
- # Related entities
319
- markets: Optional[list[GammaMarket]] = None
320
- tags: Optional[list[Tag]] = None
321
550
 
322
- # Feature toggles
323
- enable_order_book: Optional[bool] = Field(None, alias="enableOrderBook")
324
- enable_neg_risk: bool = Field(alias="enableNegRisk")
325
- neg_risk_augmented: Optional[bool] = Field(None, alias="negRiskAugmented")
326
- cyom: bool
327
- show_all_outcomes: bool = Field(alias="showAllOutcomes")
328
- show_market_images: bool = Field(alias="showMarketImages")
551
+ class ProfilePosition(BaseModel):
552
+ model_config = ConfigDict(populate_by_name=True)
553
+
554
+ token_id: int = Field(alias="tokenId")
555
+ size: Optional[float] = Field(None, alias="positionSize")
556
+
557
+ @field_validator("size", mode="before")
558
+ @classmethod
559
+ def normalize_size(cls, v) -> float:
560
+ if isinstance(v, str):
561
+ return int(v) / 10**6
562
+ return v
563
+
564
+
565
+ class Profile(BaseModel):
566
+ model_config = ConfigDict(populate_by_name=True)
567
+
568
+ name: Optional[str] = None
569
+ pseudonym: Optional[str] = None
570
+ display_username_public: Optional[bool] = Field(None, alias="displayUsernamePublic")
571
+ proxy_wallet: Optional[EthAddress] = Field(None, alias="proxyWallet")
572
+ base_address: Optional[EthAddress] = Field(None, alias="baseAddress")
573
+ profile_image: Optional[str] = Field(None, alias="profileImage")
574
+ positions: Optional[list[ProfilePosition]] = Field(None, alias="positions")
575
+
576
+
577
+ class Comment(BaseModel):
578
+ model_config = ConfigDict(populate_by_name=True)
579
+
580
+ id: str
581
+ body: str
582
+ parent_entity_type: Literal["Event", "Series", "market"] = Field(
583
+ alias="parentEntityType"
584
+ )
585
+ parent_entity_id: int = Field(alias="parentEntityID")
586
+ parent_comment_id: Optional[str] = Field(None, alias="parentCommentID")
587
+ user_address: str = Field(alias="userAddress")
588
+ reply_address: Optional[str] = Field(None, alias="replyAddress")
589
+ created_at: datetime = Field(alias="createdAt")
590
+ updated_at: Optional[datetime] = Field(None, alias="updatedAt")
591
+ profile: Optional[Profile] = None
592
+ reactions: Optional[list[Reaction]] = None
593
+ report_count: Optional[int] = Field(None, alias="reportCount")
594
+ reaction_count: Optional[int] = Field(None, alias="reactionCount")
595
+
596
+
597
+ class Reaction(BaseModel):
598
+ model_config = ConfigDict(populate_by_name=True)
599
+
600
+ id: str
601
+ comment_id: int = Field(alias="commentID")
602
+ reaction_type: str = Field(alias="reactionType")
603
+ icon: Optional[str] = None
604
+ user_address: str = Field(alias="userAddress")
605
+ created_at: datetime = Field(alias="createdAt")
606
+ profile: Optional[Profile] = None
607
+
329
608
 
330
609
  class Pagination(BaseModel):
331
610
  has_more: bool = Field(alias="hasMore")
332
611
  total_results: int = Field(alias="totalResults")
333
612
 
334
- class EventList(BaseModel):
335
- events: Optional[list[QueryEvent]] = None
336
- pagination: Pagination
337
613
 
338
- class QueryMarket(BaseModel):
339
- # Identifiers
340
- slug: str
341
- question: str
342
- group_item_title: Optional[str] = Field(None, alias="groupItemTitle")
614
+ class SearchResult(BaseModel):
615
+ model_config = ConfigDict(populate_by_name=True)
616
+
617
+ events: Optional[list[Event]] = None
618
+ tags: Optional[list[Tag]] = None
619
+ profiles: Optional[list[Profile]] = None
620
+ pagination: Pagination
343
621
 
344
- # Market data
345
- outcomes: Optional[list] = None
346
- outcome_prices: Optional[Json[list[float]] | list[float]] = Field(None, alias="outcomePrices")
347
- last_trade_price: Optional[float] = Field(None, alias="lastTradePrice")
348
- best_ask: Optional[float] = Field(None, alias="bestAsk")
349
- best_bid: Optional[float] = Field(None, alias="bestBid")
350
- spread: float
351
622
 
352
- # Status flags
353
- closed: bool
354
- archived: bool
623
+ Event.model_rebuild()
624
+ Series.model_rebuild()
625
+ GammaMarket.model_rebuild()
626
+ SearchResult.model_rebuild()