polymarket-apis 0.3.0__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,169 +13,190 @@ 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")
19
+ class OptimizedImage(BaseModel):
20
+ """Optimized image data."""
52
21
 
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
22
+ model_config = ConfigDict(populate_by_name=True)
66
23
 
67
- # User interaction
68
- comment_count: Optional[int] = Field(None, alias="commentCount")
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")
69
38
 
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")
75
39
 
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
-
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
192
 
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
- submitted_by: Optional[str] = None
171
- resolved_by: Optional[EthAddress] = Field(None, alias="resolvedBy")
172
- has_reviewed_dates: Optional[bool] = Field(None, alias="hasReviewedDates")
173
-
174
193
  @field_validator("condition_id", mode="wrap")
175
194
  @classmethod
176
195
  def validate_condition_id(
177
- cls, value: str, handler: ValidatorFunctionWrapHandler, info: ValidationInfo,
196
+ cls,
197
+ value: str,
198
+ handler: ValidatorFunctionWrapHandler,
199
+ info: ValidationInfo,
178
200
  ) -> str:
179
201
  try:
180
202
  # First attempt standard Keccak256 validation
@@ -189,166 +211,407 @@ class GammaMarket(BaseModel):
189
211
  # Re-raise original error for other cases
190
212
  raise
191
213
 
192
- class ClobReward(BaseModel):
193
- # Identifiers
194
- id: str
195
- condition_id: Keccak256 = Field(alias="conditionId")
196
214
 
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")
215
+ class Series(BaseModel):
216
+ """Series model."""
217
+
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")
201
259
 
202
- # Datetime
203
- start_date: datetime = Field(alias="startDate")
204
- 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")
205
275
 
206
276
 
207
277
  class Tag(BaseModel):
208
- # Identifiers
209
- id: str
210
- label: str
211
- slug: str
278
+ """Tag model."""
279
+
280
+ model_config = ConfigDict(populate_by_name=True)
212
281
 
213
- # 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")
214
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")
215
291
  force_hide: Optional[bool] = Field(None, alias="forceHide")
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"
355
+ )
356
+
357
+
358
+ class Creator(BaseModel):
359
+ """Event Creator model."""
216
360
 
217
- # Datetime
218
- published_at: Optional[TimestampWithTZ | datetime] = Field(None, alias="publishedAt")
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")
219
368
  created_at: Optional[datetime] = Field(None, alias="createdAt")
220
369
  updated_at: Optional[datetime] = Field(None, alias="updatedAt")
221
370
 
222
- # User information
223
- created_by: Optional[int] = Field(None, alias="createdBy")
224
- updated_by: Optional[int] = Field(None, alias="updatedBy")
225
371
 
372
+ class Template(BaseModel):
373
+ """Template model."""
226
374
 
227
- class Series(BaseModel):
228
- # Identifiers
229
- id: str
230
- slug: str
231
- ticker: str
232
- title: str
375
+ model_config = ConfigDict(populate_by_name=True)
233
376
 
234
- # Series characteristics
235
- series_type: Optional[str] = Field(None, alias="seriesType")
236
- recurrence: Optional[str] = None
237
- 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")
238
389
 
239
- # Media URLs
240
- icon: Optional[str] = None
241
- image: Optional[str] = None
242
390
 
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
391
+ class ClobReward(BaseModel):
392
+ """Reward model."""
262
393
 
263
- # User interaction
264
- comment_count: int = Field(alias="commentCount")
265
- comments_enabled: Optional[bool] = Field(None, alias="commentsEnabled")
394
+ model_config = ConfigDict(populate_by_name=True)
266
395
 
267
- # User information
268
- created_by: Optional[str] = Field(None, alias="createdBy")
269
- updated_by: Optional[str] = Field(None, alias="updatedBy")
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")
270
403
 
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
404
 
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")
405
+ class Team(BaseModel):
406
+ """Team model."""
407
+
408
+ model_config = ConfigDict(populate_by_name=True)
409
+
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
283
417
  created_at: datetime = Field(alias="createdAt")
284
418
  updated_at: Optional[datetime] = Field(None, alias="updatedAt")
285
419
 
286
- # Resolution info
287
- resolution_source: Optional[str] = Field(None, alias="resolutionSource")
288
420
 
289
- # Media URLs
421
+ class Sport(BaseModel):
422
+ """Sport model."""
423
+
424
+ model_config = ConfigDict(populate_by_name=True)
425
+
426
+ sport: str
290
427
  image: Optional[str] = None
291
- 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
292
432
 
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
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
303
439
 
304
- # Financial metrics
305
- liquidity: Optional[float] = None
306
- liquidity_clob: Optional[float] = Field(None, alias="liquidityClob")
307
- 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")
308
466
  open_interest: Optional[int] = Field(None, alias="openInterest")
309
- 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")
310
479
  volume_24hr: Optional[float] = Field(None, alias="volume24hr")
311
480
  volume_1wk: Optional[float] = Field(None, alias="volume1wk")
312
481
  volume_1mo: Optional[float] = Field(None, alias="volume1mo")
313
482
  volume_1yr: Optional[float] = Field(None, alias="volume1yr")
314
-
315
- # 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")
316
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")
317
540
 
318
- # Related entities
319
- markets: Optional[list[GammaMarket]] = None
320
- tags: Optional[list[Tag]] = None
321
541
 
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")
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
598
+
329
599
 
330
600
  class Pagination(BaseModel):
331
601
  has_more: bool = Field(alias="hasMore")
332
602
  total_results: int = Field(alias="totalResults")
333
603
 
334
- class EventList(BaseModel):
335
- events: Optional[list[QueryEvent]] = None
336
- pagination: Pagination
337
604
 
338
- class QueryMarket(BaseModel):
339
- # Identifiers
340
- slug: str
341
- question: str
342
- group_item_title: Optional[str] = Field(None, alias="groupItemTitle")
605
+ class SearchResult(BaseModel):
606
+ model_config = ConfigDict(populate_by_name=True)
607
+
608
+ events: Optional[list[Event]] = None
609
+ tags: Optional[list[Tag]] = None
610
+ profiles: Optional[list[Profile]] = None
611
+ pagination: Pagination
343
612
 
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
613
 
352
- # Status flags
353
- closed: bool
354
- archived: bool
614
+ Event.model_rebuild()
615
+ Series.model_rebuild()
616
+ GammaMarket.model_rebuild()
617
+ SearchResult.model_rebuild()