polymarket-apis 0.3.1__py3-none-any.whl → 0.3.2__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.

@@ -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,170 +13,183 @@ 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
19
+ class OptimizedImage(BaseModel):
20
+ """Optimized image data."""
29
21
 
30
- # Media URLs
31
- image: Optional[str] = None
32
- icon: Optional[str] = None
22
+ model_config = ConfigDict(populate_by_name=True)
33
23
 
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
66
-
67
- # User interaction
68
- comment_count: Optional[int] = Field(None, alias="commentCount")
69
-
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
52
+ end_date: Optional[datetime] = Field(None, alias="endDate")
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")
98
69
  outcome_prices: Optional[Json[list[float]] | list[float]] = Field(
99
70
  None, alias="outcomePrices"
100
71
  )
101
-
102
- # Media URLs
103
- image: Optional[str] = None
104
- icon: Optional[str] = None
105
-
106
- # Datetime
107
- start_date: Optional[datetime] = Field(None, alias="startDate")
108
- end_date: Optional[datetime] = Field(None, alias="endDate")
109
- created_at: datetime = Field(alias="createdAt")
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")
110
83
  updated_at: Optional[datetime] = Field(None, alias="updatedAt")
111
- start_date_iso: Optional[datetime] = Field(None, alias="startDateIso")
112
- end_date_iso: Optional[datetime] = Field(None, alias="endDateIso")
113
- deployed_timestamp: Optional[datetime] = Field(None, alias="deployedTimestamp")
114
- accepting_orders_timestamp: Optional[datetime] = Field(
115
- None, alias="acceptingOrdersTimestamp"
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"
116
99
  )
117
-
118
- # Status flags
119
- active: bool
120
- closed: bool
121
- archived: bool
122
- new: Optional[bool] = None
123
- featured: Optional[bool] = None
124
- restricted: bool
125
- ready: bool
126
- deployed: Optional[bool] = None
127
- funded: bool
128
- cyom: bool
129
- approved: bool
130
-
131
- # Financial metrics
132
- liquidity: Optional[float] = None
133
- volume: Optional[float] = None
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")
134
103
  volume_num: Optional[float] = Field(None, alias="volumeNum")
135
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")
136
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")
137
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")
138
134
  volume_clob: Optional[float] = Field(None, alias="volumeClob")
135
+ liquidity_amm: Optional[float] = Field(None, alias="liquidityAmm")
139
136
  liquidity_clob: Optional[float] = Field(None, alias="liquidityClob")
140
- competitive: Optional[float] = None
141
- spread: float
142
-
143
- # Order book settings
144
- enable_order_book: Optional[bool] = Field(None, alias="enableOrderBook")
145
- order_price_min_tick_size: Optional[float] = Field(
146
- None,
147
- alias="orderPriceMinTickSize",
148
- )
149
- 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")
150
140
  accepting_orders: Optional[bool] = Field(None, alias="acceptingOrders")
151
-
152
- # 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")
153
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")
154
191
  clob_rewards: Optional[list[ClobReward]] = Field(None, alias="clobRewards")
155
192
 
156
- # User interaction
157
- comment_count: Optional[int] = Field(None, alias="commentCount")
158
-
159
- # Market maker information
160
- market_maker_address: str = Field(alias="marketMakerAddress")
161
-
162
- # Additional settings
163
- group_item_title: Optional[str] = Field(None, alias="groupItemTitle")
164
- group_item_threshold: Optional[int] = Field(None, alias="groupItemThreshold")
165
- token_ids: Optional[Json[list[str]] | list[str]] = Field(None, alias="clobTokenIds")
166
- uma_bond: Optional[int] = Field(None, alias="umaBond")
167
- uma_reward: Optional[float] = Field(None, alias="umaReward")
168
- neg_risk: Optional[bool] = Field(None, alias="negRisk")
169
- pager_duty_notification_enabled: bool = Field(alias="pagerDutyNotificationEnabled")
170
- review_status: Optional[str] = Field(None, alias="reviewStatus")
171
- rewards_min_size: int = Field(alias="rewardsMinSize")
172
- rewards_max_spread: float = Field(alias="rewardsMaxSpread")
173
-
174
- # Resolution information
175
- submitted_by: Optional[str] = None
176
- resolved_by: Optional[EthAddress] = Field(None, alias="resolvedBy")
177
- has_reviewed_dates: Optional[bool] = Field(None, alias="hasReviewedDates")
178
-
179
193
  @field_validator("condition_id", mode="wrap")
180
194
  @classmethod
181
195
  def validate_condition_id(
@@ -198,148 +212,389 @@ class GammaMarket(BaseModel):
198
212
  raise
199
213
 
200
214
 
201
- class ClobReward(BaseModel):
202
- # Identifiers
203
- id: str
204
- condition_id: Keccak256 = Field(alias="conditionId")
215
+ class Series(BaseModel):
216
+ """Series model."""
205
217
 
206
- # Reward information
207
- asset_address: str = Field(alias="assetAddress")
208
- rewards_amount: float = Field(alias="rewardsAmount")
209
- rewards_daily_rate: Optional[float] = Field(None, alias="rewardsDailyRate")
218
+ model_config = ConfigDict(populate_by_name=True)
219
+
220
+ id: Optional[str] = Field(None, alias="id")
221
+ ticker: Optional[str] = Field(None, alias="ticker")
222
+ slug: Optional[str] = Field(None, alias="slug")
223
+ title: Optional[str] = Field(None, alias="title")
224
+ subtitle: Optional[str] = Field(None, alias="subtitle")
225
+ series_type: Optional[str] = Field(None, alias="seriesType")
226
+ recurrence: Optional[str] = Field(None, alias="recurrence")
227
+ description: Optional[str] = Field(None, alias="description")
228
+ image: Optional[str] = Field(None, alias="image")
229
+ icon: Optional[str] = Field(None, alias="icon")
230
+ layout: Optional[str] = Field(None, alias="layout")
231
+ active: Optional[bool] = Field(None, alias="active")
232
+ closed: Optional[bool] = Field(None, alias="closed")
233
+ archived: Optional[bool] = Field(None, alias="archived")
234
+ new: Optional[bool] = Field(None, alias="new")
235
+ featured: Optional[bool] = Field(None, alias="featured")
236
+ restricted: Optional[bool] = Field(None, alias="restricted")
237
+ is_template: Optional[bool] = Field(None, alias="isTemplate")
238
+ template_variables: Optional[bool] = Field(None, alias="templateVariables")
239
+ published_at: Optional[FlexibleDatetime] = Field(None, alias="publishedAt")
240
+ created_by: Optional[str] = Field(None, alias="createdBy")
241
+ updated_by: Optional[str] = Field(None, alias="updatedBy")
242
+ created_at: Optional[datetime] = Field(None, alias="createdAt")
243
+ updated_at: Optional[datetime] = Field(None, alias="updatedAt")
244
+ comments_enabled: Optional[bool] = Field(None, alias="commentsEnabled")
245
+ competitive: Optional[str] = Field(None, alias="competitive")
246
+ volume_24hr: Optional[float] = Field(None, alias="volume24hr")
247
+ volume: Optional[float] = Field(None, alias="volume")
248
+ liquidity: Optional[float] = Field(None, alias="liquidity")
249
+ start_date: Optional[datetime] = Field(None, alias="startDate")
250
+ pyth_token_id: Optional[str] = Field(None, alias="pythTokenID")
251
+ cg_asset_name: Optional[str] = Field(None, alias="cgAssetName")
252
+ score: Optional[int] = Field(None, alias="score")
253
+ events: Optional[list[Event]] = Field(None, alias="events")
254
+ collections: Optional[list[Collection]] = Field(None, alias="collections")
255
+ categories: Optional[list[Category]] = Field(None, alias="categories")
256
+ tags: Optional[list[Tag]] = Field(None, alias="tags")
257
+ comment_count: Optional[int] = Field(None, alias="commentCount")
258
+ chats: Optional[list[Chat]] = Field(None, alias="chats")
210
259
 
211
- # Datetime
212
- start_date: datetime = Field(alias="startDate")
213
- end_date: datetime = Field(alias="endDate")
260
+
261
+ class Category(BaseModel):
262
+ """Category model."""
263
+
264
+ model_config = ConfigDict(populate_by_name=True)
265
+
266
+ id: Optional[str] = Field(None, alias="id")
267
+ label: Optional[str] = Field(None, alias="label")
268
+ parent_category: Optional[str] = Field(None, alias="parentCategory")
269
+ slug: Optional[str] = Field(None, alias="slug")
270
+ published_at: Optional[str] = Field(None, alias="publishedAt")
271
+ created_by: Optional[str] = Field(None, alias="createdBy")
272
+ updated_by: Optional[str] = Field(None, alias="updatedBy")
273
+ created_at: Optional[datetime] = Field(None, alias="createdAt")
274
+ updated_at: Optional[datetime] = Field(None, alias="updatedAt")
214
275
 
215
276
 
216
277
  class Tag(BaseModel):
217
- # Identifiers
218
- id: str
219
- label: str
220
- slug: str
278
+ """Tag model."""
279
+
280
+ model_config = ConfigDict(populate_by_name=True)
221
281
 
222
- # Display settings
282
+ id: Optional[str] = Field(None, alias="id")
283
+ label: Optional[str] = Field(None, alias="label")
284
+ slug: Optional[str] = Field(None, alias="slug")
223
285
  force_show: Optional[bool] = Field(None, alias="forceShow")
286
+ published_at: Optional[str] = Field(None, alias="publishedAt")
287
+ created_by: Optional[int] = Field(None, alias="createdBy")
288
+ updated_by: Optional[int] = Field(None, alias="updatedBy")
289
+ created_at: Optional[datetime] = Field(None, alias="createdAt")
290
+ updated_at: Optional[datetime] = Field(None, alias="updatedAt")
224
291
  force_hide: Optional[bool] = Field(None, alias="forceHide")
225
-
226
- # Datetime
227
- published_at: Optional[TimestampWithTZ | datetime] = Field(
228
- None, alias="publishedAt"
292
+ is_carousel: Optional[bool] = Field(None, alias="isCarousel")
293
+
294
+
295
+ class TagRelation(BaseModel):
296
+ """Tag relation model."""
297
+
298
+ model_config = ConfigDict(populate_by_name=True)
299
+
300
+ id: int = Field(alias="id")
301
+ tag_id: int = Field(alias="tagID")
302
+ related_tag_id: int = Field(alias="relatedTagID")
303
+ rank: int
304
+
305
+
306
+ class Chat(BaseModel):
307
+ """Chat model."""
308
+
309
+ model_config = ConfigDict(populate_by_name=True)
310
+
311
+ id: Optional[str] = Field(None, alias="id")
312
+ channel_id: Optional[str] = Field(None, alias="channelId")
313
+ channel_name: Optional[str] = Field(None, alias="channelName")
314
+ channel_image: Optional[str] = Field(None, alias="channelImage")
315
+ live: Optional[bool] = Field(None, alias="live")
316
+ start_time: Optional[datetime] = Field(None, alias="startTime")
317
+ end_time: Optional[datetime] = Field(None, alias="endTime")
318
+
319
+
320
+ class Collection(BaseModel):
321
+ """Collection model."""
322
+
323
+ model_config = ConfigDict(populate_by_name=True)
324
+
325
+ id: Optional[str] = Field(None, alias="id")
326
+ ticker: Optional[str] = Field(None, alias="ticker")
327
+ slug: Optional[str] = Field(None, alias="slug")
328
+ title: Optional[str] = Field(None, alias="title")
329
+ subtitle: Optional[str] = Field(None, alias="subtitle")
330
+ collection_type: Optional[str] = Field(None, alias="collectionType")
331
+ description: Optional[str] = Field(None, alias="description")
332
+ tags: Optional[str] = Field(None, alias="tags")
333
+ image: Optional[str] = Field(None, alias="image")
334
+ icon: Optional[str] = Field(None, alias="icon")
335
+ header_image: Optional[str] = Field(None, alias="headerImage")
336
+ layout: Optional[str] = Field(None, alias="layout")
337
+ active: Optional[bool] = Field(None, alias="active")
338
+ closed: Optional[bool] = Field(None, alias="closed")
339
+ archived: Optional[bool] = Field(None, alias="archived")
340
+ new: Optional[bool] = Field(None, alias="new")
341
+ featured: Optional[bool] = Field(None, alias="featured")
342
+ restricted: Optional[bool] = Field(None, alias="restricted")
343
+ is_template: Optional[bool] = Field(None, alias="isTemplate")
344
+ template_variables: Optional[str] = Field(None, alias="templateVariables")
345
+ published_at: Optional[str] = Field(None, alias="publishedAt")
346
+ created_by: Optional[str] = Field(None, alias="createdBy")
347
+ updated_by: Optional[str] = Field(None, alias="updatedBy")
348
+ created_at: Optional[datetime] = Field(None, alias="createdAt")
349
+ updated_at: Optional[datetime] = Field(None, alias="updatedAt")
350
+ comments_enabled: Optional[bool] = Field(None, alias="commentsEnabled")
351
+ image_optimized: Optional[OptimizedImage] = Field(None, alias="imageOptimized")
352
+ icon_optimized: Optional[OptimizedImage] = Field(None, alias="iconOptimized")
353
+ header_image_optimized: Optional[OptimizedImage] = Field(
354
+ None, alias="headerImageOptimized"
229
355
  )
356
+
357
+
358
+ class Creator(BaseModel):
359
+ """Event Creator model."""
360
+
361
+ model_config = ConfigDict(populate_by_name=True)
362
+
363
+ id: Optional[str] = Field(None, alias="id")
364
+ creator_name: Optional[str] = Field(None, alias="creatorName")
365
+ creator_handle: Optional[str] = Field(None, alias="creatorHandle")
366
+ creator_url: Optional[str] = Field(None, alias="creatorUrl")
367
+ creator_image: Optional[str] = Field(None, alias="creatorImage")
230
368
  created_at: Optional[datetime] = Field(None, alias="createdAt")
231
369
  updated_at: Optional[datetime] = Field(None, alias="updatedAt")
232
370
 
233
- # User information
234
- created_by: Optional[int] = Field(None, alias="createdBy")
235
- updated_by: Optional[int] = Field(None, alias="updatedBy")
236
371
 
372
+ class Template(BaseModel):
373
+ """Template model."""
237
374
 
238
- class Series(BaseModel):
239
- # Identifiers
240
- id: str
241
- slug: str
242
- ticker: str
243
- title: str
375
+ model_config = ConfigDict(populate_by_name=True)
244
376
 
245
- # Series characteristics
246
- series_type: Optional[str] = Field(None, alias="seriesType")
247
- recurrence: Optional[str] = None
248
- layout: Optional[str] = None
377
+ id: Optional[str] = Field(None, alias="id")
378
+ event_title: Optional[str] = Field(None, alias="eventTitle")
379
+ event_slug: Optional[str] = Field(None, alias="eventSlug")
380
+ event_image: Optional[str] = Field(None, alias="eventImage")
381
+ market_title: Optional[str] = Field(None, alias="marketTitle")
382
+ description: Optional[str] = Field(None, alias="description")
383
+ resolution_source: Optional[str] = Field(None, alias="resolutionSource")
384
+ neg_risk: Optional[bool] = Field(None, alias="negRisk")
385
+ sort_by: Optional[str] = Field(None, alias="sortBy")
386
+ show_market_images: Optional[bool] = Field(None, alias="showMarketImages")
387
+ series_slug: Optional[str] = Field(None, alias="seriesSlug")
388
+ outcomes: Optional[str] = Field(None, alias="outcomes")
249
389
 
250
- # Media URLs
251
- icon: Optional[str] = None
252
- image: Optional[str] = None
253
390
 
254
- # Datetime
255
- start_date: Optional[datetime] = Field(None, alias="startDate")
256
- created_at: datetime = Field(alias="createdAt")
257
- updated_at: Optional[datetime] = Field(None, alias="updatedAt")
258
- published_at: Optional[TimestampWithTZ | datetime] = Field(
259
- None, alias="publishedAt"
260
- )
391
+ class ClobReward(BaseModel):
392
+ """Reward model."""
261
393
 
262
- # Status flags
263
- active: Optional[bool] = None
264
- archived: Optional[bool] = None
265
- closed: Optional[bool] = None
266
- featured: Optional[bool] = None
267
- new: Optional[bool] = None
268
- restricted: Optional[bool] = None
269
-
270
- # Financial metrics
271
- liquidity: Optional[float] = None
272
- volume: Optional[float] = None
273
- volume_24hr: Optional[float] = Field(None, alias="volume24hr")
274
- competitive: Optional[str] = None
394
+ model_config = ConfigDict(populate_by_name=True)
275
395
 
276
- # User interaction
277
- comment_count: int = Field(alias="commentCount")
278
- comments_enabled: Optional[bool] = Field(None, alias="commentsEnabled")
396
+ id: int
397
+ condition_id: Keccak256 = Field(alias="conditionId")
398
+ asset_address: str = Field(alias="assetAddress")
399
+ rewards_amount: float = Field(alias="rewardsAmount")
400
+ rewards_daily_rate: Optional[float] = Field(None, alias="rewardsDailyRate")
401
+ start_date: datetime = Field(alias="startDate")
402
+ end_date: datetime = Field(alias="endDate")
279
403
 
280
- # User information
281
- created_by: Optional[str] = Field(None, alias="createdBy")
282
- updated_by: Optional[str] = Field(None, alias="updatedBy")
283
404
 
405
+ class Team(BaseModel):
406
+ """Team model."""
284
407
 
285
- class QueryEvent(BaseModel):
286
- # Identifiers and description
287
- id: str
288
- ticker: Optional[str] = None
289
- slug: str
290
- title: str
291
- description: Optional[str] = None
408
+ model_config = ConfigDict(populate_by_name=True)
292
409
 
293
- # Datetime
294
- start_date: Optional[datetime] = Field(None, alias="startDate")
295
- creation_date: Optional[datetime] = Field(None, alias="creationDate")
296
- end_date: Optional[datetime] = Field(None, alias="endDate")
410
+ id: int
411
+ name: str
412
+ league: str
413
+ record: Optional[str] = None
414
+ logo: str
415
+ abbreviation: str
416
+ alias: Optional[str] = None
297
417
  created_at: datetime = Field(alias="createdAt")
298
418
  updated_at: Optional[datetime] = Field(None, alias="updatedAt")
299
419
 
300
- # Resolution info
301
- resolution_source: Optional[str] = Field(None, alias="resolutionSource")
302
420
 
303
- # Media URLs
421
+ class Sport(BaseModel):
422
+ """Sport model."""
423
+
424
+ model_config = ConfigDict(populate_by_name=True)
425
+
426
+ sport: str
304
427
  image: Optional[str] = None
305
- icon: Optional[str] = None
428
+ resolution: Optional[str] = None
429
+ ordering: Optional[Literal["home", "away"]] = None
430
+ tags: Optional[list[int]] = None
431
+ series: Optional[int] = None
306
432
 
307
- # Status flags
308
- active: bool
309
- closed: bool
310
- archived: Optional[bool] = None
311
- new: Optional[bool] = None
312
- featured: Optional[bool] = None
313
- restricted: Optional[bool] = None
314
- automatically_active: Optional[bool] = Field(None, alias="automaticallyActive")
315
- pending_deployment: Optional[bool] = Field(None, alias="pendingDeployment")
316
- deploying: Optional[bool] = None
433
+ @field_validator("tags", mode="before")
434
+ @classmethod
435
+ def split_string_to_int_list(cls, v):
436
+ if isinstance(v, str):
437
+ return [int(i) for i in v.split(",")]
438
+ return v
317
439
 
318
- # Financial metrics
319
- liquidity: Optional[float] = None
320
- liquidity_clob: Optional[float] = Field(None, alias="liquidityClob")
321
- volume: Optional[float] = None
440
+
441
+ class Event(BaseModel):
442
+ """Event model."""
443
+
444
+ model_config = ConfigDict(populate_by_name=True)
445
+
446
+ id: int = Field(alias="id")
447
+ ticker: Optional[str] = Field(None, alias="ticker")
448
+ slug: Optional[str] = Field(None, alias="slug")
449
+ title: Optional[str] = Field(None, alias="title")
450
+ subtitle: Optional[str] = Field(None, alias="subtitle")
451
+ description: Optional[str] = Field(None, alias="description")
452
+ resolution_source: Optional[str] = Field(None, alias="resolutionSource")
453
+ start_date: Optional[datetime] = Field(None, alias="startDate")
454
+ creation_date: Optional[datetime] = Field(None, alias="creationDate")
455
+ end_date: Optional[datetime] = Field(None, alias="endDate")
456
+ image: Optional[str] = Field(None, alias="image")
457
+ icon: Optional[str] = Field(None, alias="icon")
458
+ active: Optional[bool] = Field(None, alias="active")
459
+ closed: Optional[bool] = Field(None, alias="closed")
460
+ archived: Optional[bool] = Field(None, alias="archived")
461
+ new: Optional[bool] = Field(None, alias="new")
462
+ featured: Optional[bool] = Field(None, alias="featured")
463
+ restricted: Optional[bool] = Field(None, alias="restricted")
464
+ liquidity: Optional[float] = Field(None, alias="liquidity")
465
+ volume: Optional[float] = Field(None, alias="volume")
322
466
  open_interest: Optional[int] = Field(None, alias="openInterest")
323
- competitive: Optional[float] = None
467
+ sort_by: Optional[str] = Field(None, alias="sortBy")
468
+ category: Optional[str] = Field(None, alias="category")
469
+ subcategory: Optional[str] = Field(None, alias="subcategory")
470
+ is_template: Optional[bool] = Field(None, alias="isTemplate")
471
+ template_variables: Optional[str] = Field(None, alias="templateVariables")
472
+ published_at: Optional[FlexibleDatetime] = Field(None, alias="publishedAt")
473
+ created_by: Optional[str] = Field(None, alias="createdBy")
474
+ updated_by: Optional[str] = Field(None, alias="updatedBy")
475
+ created_at: Optional[datetime] = Field(None, alias="createdAt")
476
+ updated_at: Optional[datetime] = Field(None, alias="updatedAt")
477
+ comments_enabled: Optional[bool] = Field(None, alias="commentsEnabled")
478
+ competitive: Optional[float] = Field(None, alias="competitive")
324
479
  volume_24hr: Optional[float] = Field(None, alias="volume24hr")
325
480
  volume_1wk: Optional[float] = Field(None, alias="volume1wk")
326
481
  volume_1mo: Optional[float] = Field(None, alias="volume1mo")
327
482
  volume_1yr: Optional[float] = Field(None, alias="volume1yr")
328
-
329
- # User interaction metrics
483
+ featured_image: Optional[str] = Field(None, alias="featuredImage")
484
+ disqus_thread: Optional[str] = Field(None, alias="disqusThread")
485
+ parent_event: Optional[str] = Field(None, alias="parentEvent")
486
+ enable_order_book: Optional[bool] = Field(None, alias="enableOrderBook")
487
+ liquidity_amm: Optional[float] = Field(None, alias="liquidityAmm")
488
+ liquidity_clob: Optional[float] = Field(None, alias="liquidityClob")
489
+ neg_risk: Optional[bool] = Field(None, alias="negRisk")
490
+ neg_risk_market_id: Optional[str] = Field(None, alias="negRiskMarketID")
491
+ neg_risk_fee_bips: Optional[int] = Field(None, alias="negRiskFeeBips")
330
492
  comment_count: Optional[int] = Field(None, alias="commentCount")
493
+ image_optimized: Optional[OptimizedImage] = Field(None, alias="imageOptimized")
494
+ icon_optimized: Optional[OptimizedImage] = Field(None, alias="iconOptimized")
495
+ featured_image_optimized: Optional[OptimizedImage] = Field(
496
+ None, alias="featuredImageOptimized"
497
+ )
498
+ sub_events: Optional[list[str]] = Field(None, alias="subEvents")
499
+ markets: Optional[list[GammaMarket]] = Field(None, alias="markets")
500
+ series: Optional[list[Series]] = Field(None, alias="series")
501
+ categories: Optional[list[Category]] = Field(None, alias="categories")
502
+ collections: Optional[list[Collection]] = Field(None, alias="collections")
503
+ tags: Optional[list[Tag]] = Field(None, alias="tags")
504
+ cyom: Optional[bool] = Field(None, alias="cyom")
505
+ closed_time: Optional[datetime] = Field(None, alias="closedTime")
506
+ show_all_outcomes: Optional[bool] = Field(None, alias="showAllOutcomes")
507
+ show_market_images: Optional[bool] = Field(None, alias="showMarketImages")
508
+ automatically_resolved: Optional[bool] = Field(None, alias="automaticallyResolved")
509
+ enable_neg_risk: Optional[bool] = Field(None, alias="enableNegRisk")
510
+ automatically_active: Optional[bool] = Field(None, alias="automaticallyActive")
511
+ event_date: Optional[datetime] = Field(None, alias="eventDate")
512
+ start_time: Optional[datetime] = Field(None, alias="startTime")
513
+ event_week: Optional[int] = Field(None, alias="eventWeek")
514
+ series_slug: Optional[str] = Field(None, alias="seriesSlug")
515
+ score: Optional[str] = Field(None, alias="score")
516
+ elapsed: Optional[str] = Field(None, alias="elapsed")
517
+ period: Optional[str] = Field(None, alias="period")
518
+ live: Optional[bool] = Field(None, alias="live")
519
+ ended: Optional[bool] = Field(None, alias="ended")
520
+ finished_timestamp: Optional[datetime] = Field(None, alias="finishedTimestamp")
521
+ gmp_chart_mode: Optional[str] = Field(None, alias="gmpChartMode")
522
+ event_creators: Optional[list[Creator]] = Field(None, alias="eventCreators")
523
+ tweet_count: Optional[int] = Field(None, alias="tweetCount")
524
+ chats: Optional[list[Chat]] = Field(None, alias="chats")
525
+ featured_order: Optional[int] = Field(None, alias="featuredOrder")
526
+ estimate_value: Optional[bool] = Field(None, alias="estimateValue")
527
+ cant_estimate: Optional[bool] = Field(None, alias="cantEstimate")
528
+ estimated_value: Optional[str] = Field(None, alias="estimatedValue")
529
+ templates: Optional[list[Template]] = Field(None, alias="templates")
530
+ spreads_main_line: Optional[float] = Field(None, alias="spreadsMainLine")
531
+ totals_main_line: Optional[float] = Field(None, alias="totalsMainLine")
532
+ carousel_map: Optional[str] = Field(None, alias="carouselMap")
533
+ pending_deployment: Optional[bool] = Field(None, alias="pendingDeployment")
534
+ deploying: Optional[bool] = Field(None, alias="deploying")
535
+ deploying_timestamp: Optional[datetime] = Field(None, alias="deployingTimestamp")
536
+ scheduled_deployment_timestamp: Optional[datetime] = Field(
537
+ None, alias="scheduledDeploymentTimestamp"
538
+ )
539
+ game_status: Optional[str] = Field(None, alias="gameStatus")
331
540
 
332
- # Related entities
333
- markets: Optional[list[GammaMarket]] = None
334
- tags: Optional[list[Tag]] = None
335
541
 
336
- # Feature toggles
337
- enable_order_book: Optional[bool] = Field(None, alias="enableOrderBook")
338
- enable_neg_risk: bool = Field(alias="enableNegRisk")
339
- neg_risk_augmented: Optional[bool] = Field(None, alias="negRiskAugmented")
340
- cyom: bool
341
- show_all_outcomes: bool = Field(alias="showAllOutcomes")
342
- show_market_images: bool = Field(alias="showMarketImages")
542
+ class ProfilePosition(BaseModel):
543
+ model_config = ConfigDict(populate_by_name=True)
544
+
545
+ token_id: int = Field(alias="tokenId")
546
+ size: Optional[float] = Field(None, alias="positionSize")
547
+
548
+ @field_validator("size", mode="before")
549
+ @classmethod
550
+ def normalize_size(cls, v) -> float:
551
+ if isinstance(v, str):
552
+ return int(v) / 10**6
553
+ return v
554
+
555
+
556
+ class Profile(BaseModel):
557
+ model_config = ConfigDict(populate_by_name=True)
558
+
559
+ name: Optional[str] = None
560
+ pseudonym: Optional[str] = None
561
+ display_username_public: Optional[bool] = Field(None, alias="displayUsernamePublic")
562
+ proxy_wallet: Optional[EthAddress] = Field(None, alias="proxyWallet")
563
+ base_address: Optional[EthAddress] = Field(None, alias="baseAddress")
564
+ profile_image: Optional[str] = Field(None, alias="profileImage")
565
+ positions: Optional[list[ProfilePosition]] = Field(None, alias="positions")
566
+
567
+
568
+ class Comment(BaseModel):
569
+ model_config = ConfigDict(populate_by_name=True)
570
+
571
+ id: str
572
+ body: str
573
+ parent_entity_type: Literal["Event", "Series", "market"] = Field(
574
+ alias="parentEntityType"
575
+ )
576
+ parent_entity_id: int = Field(alias="parentEntityID")
577
+ parent_comment_id: Optional[str] = Field(None, alias="parentCommentID")
578
+ user_address: str = Field(alias="userAddress")
579
+ reply_address: Optional[str] = Field(None, alias="replyAddress")
580
+ created_at: datetime = Field(alias="createdAt")
581
+ updated_at: Optional[datetime] = Field(None, alias="updatedAt")
582
+ profile: Optional[Profile] = None
583
+ reactions: Optional[list[Reaction]] = None
584
+ report_count: Optional[int] = Field(None, alias="reportCount")
585
+ reaction_count: Optional[int] = Field(None, alias="reactionCount")
586
+
587
+
588
+ class Reaction(BaseModel):
589
+ model_config = ConfigDict(populate_by_name=True)
590
+
591
+ id: str
592
+ comment_id: int = Field(alias="commentID")
593
+ reaction_type: str = Field(alias="reactionType")
594
+ icon: Optional[str] = None
595
+ user_address: str = Field(alias="userAddress")
596
+ created_at: datetime = Field(alias="createdAt")
597
+ profile: Optional[Profile] = None
343
598
 
344
599
 
345
600
  class Pagination(BaseModel):
@@ -347,27 +602,16 @@ class Pagination(BaseModel):
347
602
  total_results: int = Field(alias="totalResults")
348
603
 
349
604
 
350
- class EventList(BaseModel):
351
- events: Optional[list[QueryEvent]] = None
352
- pagination: Pagination
353
-
605
+ class SearchResult(BaseModel):
606
+ model_config = ConfigDict(populate_by_name=True)
354
607
 
355
- class QueryMarket(BaseModel):
356
- # Identifiers
357
- slug: str
358
- question: str
359
- group_item_title: Optional[str] = Field(None, alias="groupItemTitle")
608
+ events: Optional[list[Event]] = None
609
+ tags: Optional[list[Tag]] = None
610
+ profiles: Optional[list[Profile]] = None
611
+ pagination: Pagination
360
612
 
361
- # Market data
362
- outcomes: Optional[list] = None
363
- outcome_prices: Optional[Json[list[float]] | list[float]] = Field(
364
- None, alias="outcomePrices"
365
- )
366
- last_trade_price: Optional[float] = Field(None, alias="lastTradePrice")
367
- best_ask: Optional[float] = Field(None, alias="bestAsk")
368
- best_bid: Optional[float] = Field(None, alias="bestBid")
369
- spread: float
370
613
 
371
- # Status flags
372
- closed: bool
373
- archived: bool
614
+ Event.model_rebuild()
615
+ Series.model_rebuild()
616
+ GammaMarket.model_rebuild()
617
+ SearchResult.model_rebuild()