@0xinsider/sdk 0.41.0 → 0.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -6
- package/dist/client.d.ts +59 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +35 -3
- package/dist/client.js.map +1 -1
- package/dist/errors.d.ts +15 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +23 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/provenance.d.ts +3 -3
- package/dist/provenance.d.ts.map +1 -1
- package/dist/provenance.js +4 -4
- package/dist/provenance.js.map +1 -1
- package/dist/schema.d.ts +286 -96
- package/dist/schema.d.ts.map +1 -1
- package/dist/stream.d.ts +45 -5
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +52 -4
- package/dist/stream.js.map +1 -1
- package/dist/webhooks.d.ts +19 -6
- package/dist/webhooks.d.ts.map +1 -1
- package/dist/webhooks.js +10 -3
- package/dist/webhooks.js.map +1 -1
- package/package.json +2 -2
package/dist/schema.d.ts
CHANGED
|
@@ -96,8 +96,8 @@ export type ApiError = {
|
|
|
96
96
|
freshness?: FreshnessFailure;
|
|
97
97
|
/** Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message. */
|
|
98
98
|
billing_url?: string;
|
|
99
|
-
/** ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed. */
|
|
100
|
-
reason?: "cursor_expired" | "unknown_endpoint" | "pick_not_released" | "trader_not_tracked" | "market_out_of_scope" | "read_model_warming" | "database_unavailable" | "request_accounting_unavailable" | "idempotency_in_progress" | "webhook_delivery_in_progress" | "webhook_secret_rotation_not_prepared" | "webhook_secret_rotation_overlap_active" | "sandbox_api_key" | "api_key_in_query" | "subscription_inactive" | "payment_overdue" | "monthly_quota_exceeded" | "invalid_query" | "unknown_query_parameter" | "invalid_path" | "invalid_body" | "unsupported_media_type" | "payload_too_large" | "method_not_allowed" | "ip_rate_limited" | "ip_throttled" | "cold_read_limited" | "export_expired" | "freshness_ceiling_unsatisfied" | "max_plan_required" | "endpoint_retired";
|
|
99
|
+
/** ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. fill_history_too_large (404 not_found, #33245): the wallet and market are tracked, but the position timeline sums every earlier fill into its running totals and this wallet has more than 20,000 fills on the market before the requested page -- stop asking for this pair; neither a retry nor another page can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed. */
|
|
100
|
+
reason?: "cursor_expired" | "unknown_endpoint" | "pick_not_released" | "trader_not_tracked" | "market_out_of_scope" | "fill_history_too_large" | "read_model_warming" | "database_unavailable" | "request_accounting_unavailable" | "idempotency_in_progress" | "webhook_delivery_in_progress" | "webhook_secret_rotation_not_prepared" | "webhook_secret_rotation_overlap_active" | "sandbox_api_key" | "api_key_in_query" | "subscription_inactive" | "payment_overdue" | "monthly_quota_exceeded" | "invalid_query" | "unknown_query_parameter" | "invalid_path" | "invalid_body" | "unsupported_media_type" | "payload_too_large" | "method_not_allowed" | "ip_rate_limited" | "ip_throttled" | "cold_read_limited" | "export_expired" | "freshness_ceiling_unsatisfied" | "max_plan_required" | "endpoint_retired";
|
|
101
101
|
};
|
|
102
102
|
meta: ResponseMeta;
|
|
103
103
|
};
|
|
@@ -112,8 +112,8 @@ export type ApiErrorBody = {
|
|
|
112
112
|
freshness?: FreshnessFailure;
|
|
113
113
|
/** Where a person clears this 402 (#32592): pays the overdue invoice (reason payment_overdue) or reactivates the plan (reason subscription_inactive). Present on every 402 subscription_required, omitted on every other error. The message names the same URL; link this field instead of parsing the message. */
|
|
114
114
|
billing_url?: string;
|
|
115
|
-
/** ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed. */
|
|
116
|
-
reason?: "cursor_expired" | "unknown_endpoint" | "pick_not_released" | "trader_not_tracked" | "market_out_of_scope" | "read_model_warming" | "database_unavailable" | "request_accounting_unavailable" | "idempotency_in_progress" | "webhook_delivery_in_progress" | "webhook_secret_rotation_not_prepared" | "webhook_secret_rotation_overlap_active" | "sandbox_api_key" | "api_key_in_query" | "subscription_inactive" | "payment_overdue" | "monthly_quota_exceeded" | "invalid_query" | "unknown_query_parameter" | "invalid_path" | "invalid_body" | "unsupported_media_type" | "payload_too_large" | "method_not_allowed" | "ip_rate_limited" | "ip_throttled" | "cold_read_limited" | "export_expired" | "freshness_ceiling_unsatisfied" | "max_plan_required" | "endpoint_retired";
|
|
115
|
+
/** ADDITIVE (#7209). The specific, actionable cause behind `code`, when there is one more specific than the code itself. `code` keeps its published values, so existing clients are unaffected; new clients branch on `reason`. Omitted when the code already says everything we know. pick_not_released: no Pick of the Day is published for the current product day; schedule one request against retry_at instead of polling. unknown_endpoint: the PATH is not a route on this API -- read GET /api/v1, do not retry. trader_not_tracked: the wallet is real and the URL is right, but the trader is not on the warm sync tier (the wallets we sync most often) -- stop asking for this wallet. market_out_of_scope (404 not_found, #27303): the market or event is real and the URL is right, but 0xinsider serves sports and esports markets only -- stop asking for this market; neither a retry nor another URL for it can succeed. fill_history_too_large (404 not_found, #33245): the wallet and market are tracked, but the position timeline sums every earlier fill into its running totals and this wallet has more than 20,000 fills on the market before the requested page -- stop asking for this pair; neither a retry nor another page can succeed. cursor_expired: pagination went stale mid-walk -- re-request the first page and continue. read_model_warming: the requested endpoint cannot serve its read model yet; exact causes are endpoint-specific and can include a cold or contended refresh or a dependency that prevented refresh. database_unavailable: the API's database or its connection pool is temporarily unreachable (a connection-class failure, not a query fault); code stays rate_limit_unavailable, nothing is rate-limited, retry after Retry-After / retry_at. idempotency_in_progress: retain the exact Idempotency-Key and request body, then retry shortly. webhook_delivery_in_progress: retry the URL or signing-secret configuration change after the destination's active request completes. request_accounting_unavailable: accounting capacity is unavailable before the handler executes; retry after Retry-After / retry_at. sandbox_api_key: the credential is a sandbox key (oxi_sk_test_) from POST /api/v1/agents/register, which only the sandbox server accepts -- call the sandbox base URL with it, or get a live key or OAuth access token; do not retry it here. api_key_in_query: the key was sent as a ?token= query parameter, which no route reads because URLs land in logs and history; the key itself was not checked -- resend it as Authorization: Bearer. subscription_inactive: the key is valid but the account's Pro subscription has lapsed (402 subscription_required); permanent until a person reactivates at https://0xinsider.com/billing, which the message names -- stop retrying on a schedule and surface the link. The key owner is emailed once per lapse. payment_overdue (402 subscription_required, #32592): the key is valid and the account still has its plan, but its latest subscription invoice is unpaid (Stripe past_due or unpaid), so paid access is paused; permanent until a person pays at billing_url (https://0xinsider.com/billing) -- stop retrying on a schedule and surface the link. The key works again the moment the invoice is paid. GET /api/v1/me and GET /api/v1/usage keep answering. monthly_quota_exceeded: the account has used the requests its plan includes for the UTC calendar month (429 rate_limited); retry_at and Retry-After name the first of next month, the only retry that can succeed, and the message names https://0xinsider.com/developers, where pay as you go for requests over the quota is turned on. The X-Monthly-Quota-Limit, X-Monthly-Quota-Remaining and X-Monthly-Quota-Reset headers on every authenticated response say how close the account is. invalid_query, invalid_path, invalid_body (400 bad_request, #16146): a query parameter, a path segment or the JSON body did not parse or does not fit the route's schema, so no handler ran; param names the field when the parser named one (a query key, a path segment, a JSON path such as traders[0], or body); fix the request, never retry it as sent. unsupported_media_type (415 bad_request, param content-type): send the body with Content-Type: application/json. payload_too_large (413 bad_request, param body): the body is over 1048576 bytes. method_not_allowed (405 bad_request): the path is a route but not with this method; the Allow header names the methods it serves. ip_rate_limited (429 rate_limited, #16380): the per-address budget every caller behind one IP shares, counted before authentication, is spent; not the key's own window, and the RateLimit-* headers describe that bucket. ip_throttled (429 rate_limited): the address is in a cooldown after sustained over-limit traffic; Retry-After is minutes to days, and a request before it does not shorten the cooldown. cold_read_limited (429 rate_limited, #28752): the account has used its share of cold reads on GET /api/v1/market/{condition_id}/holders, requests for a market whose roster is not cached, each of which walks Polymarket (6 a minute, in bursts of up to 400); not the per-minute window, so a cached market still answers, and the next cold read is admitted at Retry-After. max_plan_required (403 forbidden, #23085): the key is valid and its account is on Pro, but the route is part of Max (GET /api/v1/edge-hunter); every Pro route keeps working with the same key, so do not disable it. The message names https://0xinsider.com/pricing, where the account upgrades; a retry never clears it. endpoint_retired (410): this legacy sports endpoint no longer serves data. Migrate to GET /api/v1/edge-hunter; retrying the retired path cannot succeed. */
|
|
116
|
+
reason?: "cursor_expired" | "unknown_endpoint" | "pick_not_released" | "trader_not_tracked" | "market_out_of_scope" | "fill_history_too_large" | "read_model_warming" | "database_unavailable" | "request_accounting_unavailable" | "idempotency_in_progress" | "webhook_delivery_in_progress" | "webhook_secret_rotation_not_prepared" | "webhook_secret_rotation_overlap_active" | "sandbox_api_key" | "api_key_in_query" | "subscription_inactive" | "payment_overdue" | "monthly_quota_exceeded" | "invalid_query" | "unknown_query_parameter" | "invalid_path" | "invalid_body" | "unsupported_media_type" | "payload_too_large" | "method_not_allowed" | "ip_rate_limited" | "ip_throttled" | "cold_read_limited" | "export_expired" | "freshness_ceiling_unsatisfied" | "max_plan_required" | "endpoint_retired";
|
|
117
117
|
};
|
|
118
118
|
export type BatchGameHoldersItem = {
|
|
119
119
|
/** Zero-based request index. Duplicate inputs keep separate result rows. */
|
|
@@ -497,6 +497,8 @@ export type CreateWebhookRequest = {
|
|
|
497
497
|
url: string;
|
|
498
498
|
event_types: WebhookEventType[];
|
|
499
499
|
trade_filters?: LargeTradeSubscriptionFilters;
|
|
500
|
+
price_move_filters?: PriceMoveSubscriptionFilters;
|
|
501
|
+
settlement_filters?: SettlementSubscriptionFilters;
|
|
500
502
|
};
|
|
501
503
|
export type CreateWebhookVerificationAttemptRequest = {
|
|
502
504
|
/** The original one-time token returned by webhook creation or a URL change. Sent only in the request body and signed receiver challenge. */
|
|
@@ -1391,7 +1393,7 @@ export type GameMarket = {
|
|
|
1391
1393
|
prices?: GameMarketPrices;
|
|
1392
1394
|
/** Polymarket's reported liquidity for this market. Omitted when the provider read carried none, and on a finished game read from its stored record; never 0 in place of a missing figure. */
|
|
1393
1395
|
liquidity?: GameMarketLiquidity;
|
|
1394
|
-
/** How Polymarket's oracle settled or is settling this market, the block GET /api/v1/games/{event_slug}/markets serves, from the same per-game store. Always present on GET /api/v1/games/{event_slug}; on GET /api/v1/games only with expand=settlement. It never waits for Polymarket: a game not read lately reads status unavailable while its read starts. */
|
|
1396
|
+
/** How Polymarket's oracle settled or is settling this market, the block GET /api/v1/games/{event_slug}/markets serves, from the same per-game store. Always present on GET /api/v1/games/{event_slug}; on GET /api/v1/games only with expand=settlement. It never waits for Polymarket: a settled market reads its recorded settlement on the first read, and any other market of a game not read lately reads status unavailable while its read starts. */
|
|
1395
1397
|
settlement?: {
|
|
1396
1398
|
expected_settlement_time: string | null;
|
|
1397
1399
|
observed_at: string | null;
|
|
@@ -1493,7 +1495,8 @@ export type GameSharpMoney = {
|
|
|
1493
1495
|
is_leader: boolean;
|
|
1494
1496
|
label: string;
|
|
1495
1497
|
pct: number;
|
|
1496
|
-
side:
|
|
1498
|
+
/** The side the provider designates this outcome's team: home or away, by Polymarket's own home/away designation (teams[].ordering), never the outcome's place in this list; draw for a 1X2 draw. null when the provider designates neither team home or away; never inferred from order. */
|
|
1499
|
+
side: "home" | "draw" | "away" | null;
|
|
1497
1500
|
usd: number;
|
|
1498
1501
|
wallets: {
|
|
1499
1502
|
a: number;
|
|
@@ -1544,6 +1547,10 @@ export type GameStatus = {
|
|
|
1544
1547
|
live?: boolean;
|
|
1545
1548
|
/** Whether the game is over. Always present. */
|
|
1546
1549
|
ended: boolean;
|
|
1550
|
+
/** When the game ended (RFC 3339 UTC), as first observed. Always present. It is null unless state is ended and an end was observed. It is never inferred from the kickoff, the clock or the market's resolution. Null on an ended game means the end time is unknown, and games that ended before this field shipped carry null. ended_at_source names who observed it. */
|
|
1551
|
+
ended_at: string | null;
|
|
1552
|
+
/** Who observed ended_at. Always present, and null exactly when ended_at is null. sports_ws: the first Polymarket Sports WebSocket frame that reported the game final, at the time it was received. gamma_finished: for a game no such frame ended, Polymarket's own event finish time, served only when it is earlier than the market's resolution and never for a fight card (MMA, boxing). */
|
|
1553
|
+
ended_at_source: "sports_ws" | "gamma_finished" | null;
|
|
1547
1554
|
};
|
|
1548
1555
|
/** The tennis tournament edition a game belongs to, curated from official ATP, WTA and ITF pages (source_urls), never from Polymarket, which supplies the competition label and tour only. Selected by the game's provider competition label, the one tour both players carry, and the kickoff's day at the venue. A fact no official page states is omitted. */
|
|
1549
1556
|
export type GameTournament = {
|
|
@@ -1823,6 +1830,10 @@ export type LargeTrade = {
|
|
|
1823
1830
|
status: "measured" | "in_play" | "pending" | "unavailable";
|
|
1824
1831
|
/** Set exactly when status is unavailable. The market's reasons (see MarketClose.unavailable_reason), plus anchor_stale (the kickoff moved after the close was captured) and outcome_unknown (the traded outcome is not known for this trade). */
|
|
1825
1832
|
unavailable_reason: "no_observation_in_lookback" | "provider_empty_window" | "provider_invalid_contract" | "capture_window_closed" | "no_game_start_time" | "not_one_sided_resolution" | "not_captured" | "close_token_mismatch" | "anchor_stale" | "outcome_unknown" | null;
|
|
1833
|
+
/** clv_cents - taker_fee_cents: the CLV after the fee the fill paid, cents per share. Set exactly when both are set. */
|
|
1834
|
+
clv_after_fees_cents: number | null;
|
|
1835
|
+
/** The fee the fill paid as taker, cents per share, from the exchange's on-chain record of the fill (the OrderFilled event in its Polygon receipt); the trader is its taker. Polymarket charges only takers, so a buy's fee adds to its cost and a sell's comes out of its proceeds, and either way it lowers the CLV by this amount. Includes any builder fee an app added; excludes maker and taker rebates, which Polymarket pays later and no fill records. Set whatever status is; null until the record is decoded (about a minute after the trade) and for trades before 2026-08-16. */
|
|
1836
|
+
taker_fee_cents: number | null;
|
|
1826
1837
|
};
|
|
1827
1838
|
};
|
|
1828
1839
|
export type LargeTradeDetail = LargeTrade & {
|
|
@@ -2265,6 +2276,62 @@ export type MarketHoldersTotals = {
|
|
|
2265
2276
|
/** no_usd split by grade: where the S, A and B money on NO sits. */
|
|
2266
2277
|
no_grade_usd: MarketHoldersSideGradeUsd;
|
|
2267
2278
|
};
|
|
2279
|
+
/** `market_price_moved` data, also the MarketPriceMoved frame on GET /api/v1/stream: a sports or esports market's outcome-0 midpoint moved a whole-cent level over one window. Prices are decimal strings at full precision. A missing value is null with its *_unavailable_reason. */
|
|
2280
|
+
export type MarketPriceMovedData = {
|
|
2281
|
+
best_ask: string;
|
|
2282
|
+
best_bid: string;
|
|
2283
|
+
concurrent_sharp_flow: {
|
|
2284
|
+
detected: boolean;
|
|
2285
|
+
grade_floor: "S" | "A" | "B" | "C" | "D" | "F";
|
|
2286
|
+
net_flow_usd: number;
|
|
2287
|
+
ranked_large_trades: number;
|
|
2288
|
+
/** Large trades on the market in the same window at any grade, ungraded wallets included. ranked_large_trades is the part of them at grade_floor or better. */
|
|
2289
|
+
large_trades_in_window: number | null;
|
|
2290
|
+
} | null;
|
|
2291
|
+
concurrent_sharp_flow_unavailable_reason: "read_failed" | null;
|
|
2292
|
+
condition_id: string;
|
|
2293
|
+
detected_at: string;
|
|
2294
|
+
direction: "up" | "down";
|
|
2295
|
+
event_slug: string | null;
|
|
2296
|
+
from_price: string;
|
|
2297
|
+
game_state: {
|
|
2298
|
+
clock: string | null;
|
|
2299
|
+
ended: boolean;
|
|
2300
|
+
live: boolean | null;
|
|
2301
|
+
period: string | null;
|
|
2302
|
+
scores: LiveSportsScoreEntry[];
|
|
2303
|
+
status: string | null;
|
|
2304
|
+
updated_at: string;
|
|
2305
|
+
} | null;
|
|
2306
|
+
game_state_unavailable_reason: "no_event_slug" | "no_game_state" | "read_failed" | null;
|
|
2307
|
+
gap_before: boolean;
|
|
2308
|
+
label: string | null;
|
|
2309
|
+
league: string | null;
|
|
2310
|
+
level_cents: number;
|
|
2311
|
+
market_slug: string | null;
|
|
2312
|
+
move_cents: string;
|
|
2313
|
+
observed_at: string | null;
|
|
2314
|
+
outcome_index: number;
|
|
2315
|
+
/** Where the game stood at detected_at. in_play: its live state reports it live. pre_game: its live state is neither live nor ended, or it has no live state yet and the market's scheduled start (the games endpoints' scheduled_at) is after detected_at. unknown: neither holds or the live state could not be read; game_state_unavailable_reason says why. */
|
|
2316
|
+
phase: "pre_game" | "in_play" | "unknown";
|
|
2317
|
+
previous_level_cents: number;
|
|
2318
|
+
source: string;
|
|
2319
|
+
spread_cents: string;
|
|
2320
|
+
to_price: string;
|
|
2321
|
+
window_seconds: number;
|
|
2322
|
+
window_start: string;
|
|
2323
|
+
/** Why book_depth_within_2c is null, and null when it is present. no_book: no full order book has arrived for the market since tracking began, only quotes. book_changed: the best bid or ask moved after the latest full book, so its depth belongs to another top. band_not_covered: the latest full book shows no level beyond 2 cents from the midpoint on at least one side, so that side's sum could be cut short. */
|
|
2324
|
+
book_depth_unavailable_reason: "no_book" | "book_changed" | "band_not_covered" | null;
|
|
2325
|
+
/** USD resting within 2 cents of outcome 0's midpoint on each side at detected_at, or null with book_depth_unavailable_reason. */
|
|
2326
|
+
book_depth_within_2c: {
|
|
2327
|
+
/** USD resting on asks priced at or below the midpoint plus 0.02 (price times size), as a decimal string. */
|
|
2328
|
+
ask_usd: string;
|
|
2329
|
+
/** USD resting on bids priced at or above the midpoint minus 0.02 (price times size), as a decimal string. */
|
|
2330
|
+
bid_usd: string;
|
|
2331
|
+
/** When we received the full order book the sums come from. Its best bid and ask are the event's best_bid and best_ask; deeper levels may have changed since. */
|
|
2332
|
+
book_observed_at: string;
|
|
2333
|
+
} | null;
|
|
2334
|
+
};
|
|
2268
2335
|
export type MarketSearchResult = {
|
|
2269
2336
|
id: string;
|
|
2270
2337
|
condition_id: string;
|
|
@@ -2277,6 +2344,40 @@ export type MarketSearchResult = {
|
|
|
2277
2344
|
status: "active" | "closed";
|
|
2278
2345
|
event_slug?: string;
|
|
2279
2346
|
};
|
|
2347
|
+
/** `market_settled` data, also the MarketSettled frame on GET /api/v1/stream: a sports or esports game market settled, sent once per settled state the first time 0xinsider records it. A market can settle in two states, a resolved UMA question row without payouts and then the condition row with them; each is its own event with its own settlement_id. */
|
|
2348
|
+
export type MarketSettledData = {
|
|
2349
|
+
/** Polymarket condition ID of the market, lowercase. */
|
|
2350
|
+
condition_id: string;
|
|
2351
|
+
/** The recorded state: one per market per settled state, never reused. Deduplicate on it, or on the event id. */
|
|
2352
|
+
settlement_id: number;
|
|
2353
|
+
/** Polymarket event (game) slug, or null when the market stores none. */
|
|
2354
|
+
event_slug: string | null;
|
|
2355
|
+
/** Polymarket game ID for the event as a string, the game_id of GET /api/v1/games, or null when the market stores none. */
|
|
2356
|
+
game_id: string | null;
|
|
2357
|
+
/** The event slug league prefix (nba in nba-lal-gsw-2026-11-01), lowercase, read after a polyv2 copy prefix; null when the slug has none. */
|
|
2358
|
+
league: string | null;
|
|
2359
|
+
/** Polymarket sportsMarketType of the market (moneyline, spreads, totals, a prop type) verbatim, or null when the market stores none. */
|
|
2360
|
+
sports_market_type: string | null;
|
|
2361
|
+
/** Outcome names, each at its outcome index: settlement.payouts and settlement.winning_outcome_index index into it. Empty when the market stores none; an outcome Polymarket labels blank is an empty string. */
|
|
2362
|
+
outcomes: string[];
|
|
2363
|
+
/** Set on a Polymarket polyv2 copy of a game whose original event has a moneyline market: the original event slug, which GET /api/v1/games serves. Such a copy reaches a webhook only when its settlement_filters name its condition ID or its own event slug. */
|
|
2364
|
+
copy_of_event_slug: string | null;
|
|
2365
|
+
/** The settled state, the block GET /api/v1/games/{event_slug}/markets serves as settlement: status observed, oracle_status resolved, settled true. payouts is null on a resolved UMA question row and set on the condition row that follows, which is sent as its own event. observed_at is when 0xinsider first saw this state. */
|
|
2366
|
+
settlement: {
|
|
2367
|
+
expected_settlement_time: string | null;
|
|
2368
|
+
observed_at: string | null;
|
|
2369
|
+
oracle_status: string | null;
|
|
2370
|
+
payouts: number[] | null;
|
|
2371
|
+
proposed_answer: "outcome_0" | "outcome_1" | "split" | "too_early" | null;
|
|
2372
|
+
resolved_at: string | null;
|
|
2373
|
+
result: "outcome" | "split" | null;
|
|
2374
|
+
settled: boolean | null;
|
|
2375
|
+
settlement_time_basis: string | null;
|
|
2376
|
+
status: "observed" | "not_posed" | "unavailable";
|
|
2377
|
+
was_disputed: boolean | null;
|
|
2378
|
+
winning_outcome_index: number | null;
|
|
2379
|
+
};
|
|
2380
|
+
};
|
|
2280
2381
|
export type MarketSnapshot = {
|
|
2281
2382
|
market: {
|
|
2282
2383
|
id: string;
|
|
@@ -2346,7 +2447,7 @@ export type MarketSnapshot = {
|
|
|
2346
2447
|
};
|
|
2347
2448
|
/** Price and spread trust metadata. Present only when expand=trust or expand[]=trust is requested. */
|
|
2348
2449
|
trust?: MarketSnapshotTrust;
|
|
2349
|
-
/** How Polymarket's oracle settled or is settling this market, the block GET /api/v1/games/{event_slug}/markets serves, read from the store of the market's event (a child event's market: its game's). It never waits for Polymarket: with nothing stored
|
|
2450
|
+
/** How Polymarket's oracle settled or is settling this market, the block GET /api/v1/games/{event_slug}/markets serves, read from the store of the market's event (a child event's market: its game's). It never waits for Polymarket: with nothing stored a settled market reads its recorded settlement, and any other reads status unavailable while the read starts. market.market_result stays null; read settlement.result. */
|
|
2350
2451
|
settlement: {
|
|
2351
2452
|
expected_settlement_time: string | null;
|
|
2352
2453
|
observed_at: string | null;
|
|
@@ -2376,7 +2477,9 @@ export type MarketSnapshotTopOfBook = {
|
|
|
2376
2477
|
best_bid?: number;
|
|
2377
2478
|
best_ask?: number;
|
|
2378
2479
|
spread_bps?: number;
|
|
2480
|
+
/** USD (price times size) on bids at or above the midpoint minus 0.02, from the whole book, rounded to the cent. The props filter min_book_usd_within_2c compares the unrounded sums, which expand=quotes serves as book_depth_within_2c. Absent when we hold no depth for the book. */
|
|
2379
2481
|
bid_depth_usdc?: number;
|
|
2482
|
+
/** USD (price times size) on asks at or below the midpoint plus 0.02, from the whole book, rounded to the cent. The props filter min_book_usd_within_2c compares the unrounded sums, which expand=quotes serves as book_depth_within_2c. Absent when we hold no depth for the book. */
|
|
2380
2483
|
ask_depth_usdc?: number;
|
|
2381
2484
|
reason?: string;
|
|
2382
2485
|
};
|
|
@@ -2565,8 +2668,10 @@ export type PickHolder = {
|
|
|
2565
2668
|
/** Settled markets in the category that this wallet closed with a profit or a loss. A market resolved at zero realized P&L is in neither count. */
|
|
2566
2669
|
decided: number;
|
|
2567
2670
|
};
|
|
2568
|
-
/** The wallet's average entry price in the pick's canonical category, as a 0..1 fraction of $1 (0.98 is 98 cents). Its sample is the wallet's markets in that category that resolved to a winning side, of $20 or more where it bought one side at a known price, so it can differ from the `category_win_record` sample. A wallet that buys near-certain outcomes wins almost every time, so read the win rate beside this price. Present only with `category_win_rate_status` = `measured`, and only when that sample has at least 5 markets. When `category_win_rate_game` is present the price is still the whole `category` bucket's
|
|
2671
|
+
/** The wallet's average entry price in the pick's canonical category, as a 0..1 fraction of $1 (0.98 is 98 cents). Its sample is the wallet's markets in that category that resolved to a winning side, of $20 or more where it bought one side at a known price, so it can differ from the `category_win_record` sample. A wallet that buys near-certain outcomes wins almost every time, so read the win rate beside this price. Present only with `category_win_rate_status` = `measured`, and only when that sample has at least 5 markets. When `category_win_rate_game` is present the price is still the whole `category` bucket's; the game's or league's own price is `category_scope_avg_price`. Absent otherwise and on payloads predating the field. */
|
|
2569
2672
|
category_avg_price?: number;
|
|
2673
|
+
/** The wallet's average entry price in the game or league `category_win_rate_game` names, as a 0..1 fraction of $1: `category_avg_price` over that game's or league's markets only, under the same sample rules and the same 5-market floor. Read `category_win_rate` against this price when both are present; the difference is the wallet's edge there. Present only beside `category_win_rate_game`, and only when that sample clears the floor; recomputed at serve time, not frozen with the pick. Absent otherwise and on payloads predating the field. */
|
|
2674
|
+
category_scope_avg_price?: number;
|
|
2570
2675
|
/** Where `category_win_rate` and `category_win_record` were measured, by the same name the pick's `display_category` uses for it: for an esports pick the game (`LoL`, `CS2`, `Dota 2`, `Valorant`, `Call of Duty`, `Honor of Kings`, `Mobile Legends: Bang Bang`, `Overwatch`, `Rainbow Six Siege`, `Rocket League` or `StarCraft II`), and for a pick in a registered league that league (`NBA`, `NFL`, `NHL`, `MLB`, `UFC`, `ATP`, `WTA`, `LaLiga`, `Premier League`, `Serie A`, `UEFA Champions League`, `MLS` and the other registered leagues). Present only when the wallet's record there clears the 5-settled-market floor, in which case the rate and record are the game's or league's rather than the whole `category` bucket's. Absent when the rate is the bucket's (the wallet's history there is under the floor, or the competition is not a registered league), on every other pick, beside every non-measured status, and on payloads predating the field. Label the rate with this when present and with `category` otherwise. */
|
|
2571
2676
|
category_win_rate_game?: string;
|
|
2572
2677
|
/** Why `category_win_rate` is present or absent on a `display_holders` entry: `measured` (rate present), `not_enough_data` (the wallet is below the settled-market floor of 5 in the category), or `unavailable` (the annotation read failed; retry later). Never `untracked`: every recorded holder is a graded wallet 0xinsider has on file. Absent entirely on `holders` entries, legacy rows, and payloads predating the field -- absence means the roster was never annotated, not a small sample. */
|
|
@@ -3123,8 +3228,6 @@ export type PickOfTheDayLedgerOpenedEntry = {
|
|
|
3123
3228
|
supersedes_pick_id: string | null;
|
|
3124
3229
|
/** Explicit proof provenance: 1 retains historic eight-field canonical JSON; 2 binds stable pick_id and version without pick_rank. */
|
|
3125
3230
|
commitment_version: 1 | 2;
|
|
3126
|
-
/** How the pick was chosen: auto by the selection algorithm, manual by an operator (102 published picks from 2026-06-23 to 2026-10-15; none since). Outside the hashed payload, so it moves no commitment. */
|
|
3127
|
-
selected_by: "auto" | "manual";
|
|
3128
3231
|
};
|
|
3129
3232
|
/** An unresolved published pick. Carries only date, rank, hash, algorithm, seal instant and permalink. Kickoff and game identity are withheld; seal time remains public commitment provenance. */
|
|
3130
3233
|
export type PickOfTheDayLedgerSealedEntry = {
|
|
@@ -3157,8 +3260,6 @@ export type PickOfTheDayLedgerSealedEntry = {
|
|
|
3157
3260
|
supersedes_pick_id: string | null;
|
|
3158
3261
|
/** Explicit proof provenance: 1 retains historic eight-field canonical JSON; 2 binds stable pick_id and version without pick_rank. */
|
|
3159
3262
|
commitment_version: 1 | 2;
|
|
3160
|
-
/** How the pick was chosen: auto by the selection algorithm, manual by an operator (102 published picks from 2026-06-23 to 2026-10-15; none since). Outside the hashed payload, so it moves no commitment. */
|
|
3161
|
-
selected_by: "auto" | "manual";
|
|
3162
3263
|
};
|
|
3163
3264
|
/** A pick without a commitment, retained so the record cannot omit unprovable entries. Unresolved entries omit game identity; once resolved, matchup, category and payload become public. Existing opened canonical payload bytes and hashes are unchanged. */
|
|
3164
3265
|
export type PickOfTheDayLedgerUncommittedEntry = {
|
|
@@ -3197,8 +3298,6 @@ export type PickOfTheDayLedgerUncommittedEntry = {
|
|
|
3197
3298
|
* @deprecated
|
|
3198
3299
|
*/
|
|
3199
3300
|
supersedes_pick_id: string | null;
|
|
3200
|
-
/** How the pick was chosen: auto by the selection algorithm, manual by an operator (102 published picks from 2026-06-23 to 2026-10-15; none since). Outside the hashed payload, so it moves no commitment. */
|
|
3201
|
-
selected_by: "auto" | "manual";
|
|
3202
3301
|
};
|
|
3203
3302
|
/** A successful current-day entitlement response when only unauthorized ranks have published. It carries an empty pick set, identity-free locked ranks and an upgrade message. Selection IDs, game identity, prices and unauthorized clocks are absent. Any scheduled or proof-pending rows are entitled rows. */
|
|
3204
3303
|
export type PickOfTheDayNoEntitledPicks = {
|
|
@@ -3623,37 +3722,6 @@ export type PickOfTheDayStats = {
|
|
|
3623
3722
|
pick_id: string;
|
|
3624
3723
|
pick_rank: number;
|
|
3625
3724
|
}[];
|
|
3626
|
-
selections: {
|
|
3627
|
-
canonical_category?: string;
|
|
3628
|
-
clv_avg_display?: string;
|
|
3629
|
-
clv_avg_pct?: number;
|
|
3630
|
-
clv_avg_pp?: number;
|
|
3631
|
-
clv_avg_pp_display?: string;
|
|
3632
|
-
clv_measured: number;
|
|
3633
|
-
edge_display?: string;
|
|
3634
|
-
edge_pp?: number;
|
|
3635
|
-
key: string;
|
|
3636
|
-
label: string;
|
|
3637
|
-
losses: number;
|
|
3638
|
-
net_profit_display?: string;
|
|
3639
|
-
net_profit_usd?: number;
|
|
3640
|
-
pending: number;
|
|
3641
|
-
picks: number;
|
|
3642
|
-
priced_decided: number;
|
|
3643
|
-
priced_in_display?: string;
|
|
3644
|
-
priced_in_pct?: number;
|
|
3645
|
-
roi_display?: string;
|
|
3646
|
-
roi_pct?: number;
|
|
3647
|
-
settled: number;
|
|
3648
|
-
small_sample: boolean;
|
|
3649
|
-
staked_usd: number;
|
|
3650
|
-
unit_score?: number;
|
|
3651
|
-
unit_score_display?: string;
|
|
3652
|
-
void: number;
|
|
3653
|
-
win_rate_display?: string;
|
|
3654
|
-
win_rate_pct?: number;
|
|
3655
|
-
wins: number;
|
|
3656
|
-
}[];
|
|
3657
3725
|
};
|
|
3658
3726
|
/** The stats with `view=summary` or `sections`: only the named sections, listed in `sections`. `view=summary` names every section except `series`, `days`, `categories`, `months` and `voids`. */
|
|
3659
3727
|
export type PickOfTheDayStatsSections = {
|
|
@@ -4094,37 +4162,6 @@ export type PickOfTheDayStatsSections = {
|
|
|
4094
4162
|
pick_id: string;
|
|
4095
4163
|
pick_rank: number;
|
|
4096
4164
|
}[];
|
|
4097
|
-
selections?: {
|
|
4098
|
-
canonical_category?: string;
|
|
4099
|
-
clv_avg_display?: string;
|
|
4100
|
-
clv_avg_pct?: number;
|
|
4101
|
-
clv_avg_pp?: number;
|
|
4102
|
-
clv_avg_pp_display?: string;
|
|
4103
|
-
clv_measured: number;
|
|
4104
|
-
edge_display?: string;
|
|
4105
|
-
edge_pp?: number;
|
|
4106
|
-
key: string;
|
|
4107
|
-
label: string;
|
|
4108
|
-
losses: number;
|
|
4109
|
-
net_profit_display?: string;
|
|
4110
|
-
net_profit_usd?: number;
|
|
4111
|
-
pending: number;
|
|
4112
|
-
picks: number;
|
|
4113
|
-
priced_decided: number;
|
|
4114
|
-
priced_in_display?: string;
|
|
4115
|
-
priced_in_pct?: number;
|
|
4116
|
-
roi_display?: string;
|
|
4117
|
-
roi_pct?: number;
|
|
4118
|
-
settled: number;
|
|
4119
|
-
small_sample: boolean;
|
|
4120
|
-
staked_usd: number;
|
|
4121
|
-
unit_score?: number;
|
|
4122
|
-
unit_score_display?: string;
|
|
4123
|
-
void: number;
|
|
4124
|
-
win_rate_display?: string;
|
|
4125
|
-
win_rate_pct?: number;
|
|
4126
|
-
wins: number;
|
|
4127
|
-
}[];
|
|
4128
4165
|
};
|
|
4129
4166
|
/** A settled uncommitted pick's market, side and price. The same eight fields as PickOfTheDayCommitmentPayload, in the same key order, so a settled pick's side and price sit under payload whatever the entry's state. It is NOT a commitment: no hash was taken over it before the game, and it proves nothing about when the pick was made. */
|
|
4130
4167
|
export type PickOfTheDayUncommittedPayload = {
|
|
@@ -4324,7 +4361,7 @@ export type PositionExact = {
|
|
|
4324
4361
|
realized_pnl?: ExactDecimal;
|
|
4325
4362
|
};
|
|
4326
4363
|
export type PositionTimelineEvent = {
|
|
4327
|
-
/**
|
|
4364
|
+
/** Opaque fill id (fill_...). Responses before #33245 carried pe_... ids, which no longer match. */
|
|
4328
4365
|
id: string;
|
|
4329
4366
|
/** ISO 8601 timestamp of the on-chain fill. */
|
|
4330
4367
|
event_timestamp: string;
|
|
@@ -4339,8 +4376,8 @@ export type PositionTimelineEvent = {
|
|
|
4339
4376
|
price: number;
|
|
4340
4377
|
/** Positive USDC notional of the fill. */
|
|
4341
4378
|
usdc_notional: number;
|
|
4342
|
-
/** Polygon transaction hash of the fill. */
|
|
4343
|
-
tx_hash: string;
|
|
4379
|
+
/** Polygon transaction hash of the fill, from the large-trade alert recorded for it. null for a fill with no such alert: the fill ledger stores no transaction hash (#33245). */
|
|
4380
|
+
tx_hash: string | null;
|
|
4344
4381
|
/** Cumulative signed stored-fill amount for this outcome after this fill, including older pages. Stable across limits/cursors for unchanged source history. Excludes split, merge, redemption and neg-risk activity; not complete holdings. Incomplete fill history can also leave a negative amount. */
|
|
4345
4382
|
running_amount: number;
|
|
4346
4383
|
/** Cumulative buy-weighted average of stored fills for this outcome, including older pages; not provider current-position avgPrice. Sells do not change this value. 0 when no stored buys have occurred yet. */
|
|
@@ -4369,6 +4406,25 @@ export type PotdEntryAuthorization = {
|
|
|
4369
4406
|
/** Authorization expiry timestamp. Existing grants do not extend; an expired authorization cannot authorize a new automated entry. */
|
|
4370
4407
|
expires_at: string;
|
|
4371
4408
|
};
|
|
4409
|
+
/** Settings for market_price_moved: required when event_types includes it, refused (400) when it does not. A PATCH without it keeps the stored settings; removing the event clears them. A subscription receives at most one delivery per market per window: the one level step whose (previous_level_cents, level_cents] holds min_move_cents. */
|
|
4410
|
+
export type PriceMoveSubscriptionFilters = {
|
|
4411
|
+
/** Move threshold in whole cents of outcome 0's midpoint. */
|
|
4412
|
+
min_move_cents: number;
|
|
4413
|
+
/** The window the move is measured over. */
|
|
4414
|
+
window_seconds: 60 | 120 | 300 | 900;
|
|
4415
|
+
/** One market only. Raw or mkt_-prefixed. */
|
|
4416
|
+
condition_id?: string;
|
|
4417
|
+
/** One Polymarket event (game) only. */
|
|
4418
|
+
event_slug?: string;
|
|
4419
|
+
/** Event slug league prefixes such as nba or epl, matched case-insensitively; any one matches. */
|
|
4420
|
+
league?: string[];
|
|
4421
|
+
/** Game phase when the move was detected. any includes unknown. */
|
|
4422
|
+
phase: "any" | "pre_game" | "in_play";
|
|
4423
|
+
/** Deliver only moves with concurrent_sharp_flow.detected true. */
|
|
4424
|
+
require_concurrent_sharp_flow: boolean;
|
|
4425
|
+
/** Deliver only moves whose book_depth_within_2c is known and holds at least this many USD on each side. A move with book_depth_within_2c null does not match. */
|
|
4426
|
+
min_book_usd_within_2c?: number;
|
|
4427
|
+
};
|
|
4372
4428
|
/** One PUBLISHED same-day pick whose holder proof is not readable yet: its stable slot rank, the release and kickoff instants, and the instant before which a retry cannot succeed. Every item in `picks` carries its full required shape, so a pick that cannot meet it is listed here instead of being served with missing fields or a synthetic zero. */
|
|
4373
4429
|
export type ProofPendingPickSlot = {
|
|
4374
4430
|
/**
|
|
@@ -4560,6 +4616,8 @@ export type ResponseMeta = {
|
|
|
4560
4616
|
ranking_generation?: number;
|
|
4561
4617
|
/** Authoritative RFC3339 timestamp from cache_generations.updated_at for ranking_generation. It is read in the same repeatable-read snapshot as the leaderboard rows and is not request time, cache write time, or row insertion order. */
|
|
4562
4618
|
ranking_as_of?: string;
|
|
4619
|
+
/** GET /api/v1/leaderboard only. The cursor's ranking_generation, set when this page continued a cursor from an earlier ranking that moved under it: the rows follow the cursor's boundary in the ranking named by ranking_generation, so a trader who crossed the boundary can repeat a row you already hold or be missing from the walk. De-duplicate by id, or restart from the first page for an exact walk. Omitted on a first page and on an exact continuation, including a newer generation in which nothing a page of that order reads moved. It can equal ranking_generation when the ranking moved within one generation: on the default order, sort=rank and sort=grade when the rank keys changed, and on every other sort whenever the projection republished (about once a minute; since 2026-11-07). */
|
|
4620
|
+
continued_from_generation?: number;
|
|
4563
4621
|
/** Directional evidence provenance for Edge Hunter signals collections. The default board carries this provenance in data.directional_source and omits this optional meta field. */
|
|
4564
4622
|
directional_source?: "live" | "degraded";
|
|
4565
4623
|
/** Ranking evidence provenance for Edge Hunter signals collections. The default board carries this clock/provenance in data.ranking_source and omits this optional meta field. */
|
|
@@ -4618,6 +4676,17 @@ export type ScoreCell = {
|
|
|
4618
4676
|
};
|
|
4619
4677
|
/** Shape the provider score string was parsed into. `two_side` is one aggregate per side (basketball `105-98`), `multi_set` is per-set columns (tennis `6-7(5-7), 6-0, 1-0`), `esports_series` is a maps/sets/format triplet (`000-000|2-0|Bo3`). Omitted when the score could not be parsed. */
|
|
4620
4678
|
export type ScoreFormat = "two_side" | "multi_set" | "esports_series";
|
|
4679
|
+
/** Settings for market_settled; every set field must match. Optional: subscribing without it stores {"sports_market_types": ["moneyline"]}, each game's winner market, and sending it without the event is refused (400). A PATCH without it keeps the stored settings while the event stays subscribed; removing the event clears them. Stored as the API normalized it: trimmed and deduplicated, leagues, market types and condition IDs lowercased, and sports_market_types filled in when omitted. */
|
|
4680
|
+
export type SettlementSubscriptionFilters = {
|
|
4681
|
+
/** Event slug league prefixes such as nba or epl, matched case-insensitively; any one matches. A polyv2 copy's league is read after its polyv2 prefix. */
|
|
4682
|
+
leagues?: string[];
|
|
4683
|
+
/** Polymarket sportsMarketType values such as moneyline, spreads, totals or a prop type, matched case-insensitively; any one matches, and * matches every type. Omitted, it is ["moneyline"], or ["*"] when condition_ids names the markets. */
|
|
4684
|
+
sports_market_types?: string[];
|
|
4685
|
+
/** Polymarket event (game) slugs; any one matches. */
|
|
4686
|
+
event_slugs?: string[];
|
|
4687
|
+
/** Market condition IDs, raw or mkt_-prefixed; any one matches. */
|
|
4688
|
+
condition_ids?: string[];
|
|
4689
|
+
};
|
|
4621
4690
|
/** `sharp_money_flow_detected` data (Pro and Max): ranked-trader net flow on a market crossed the threshold. The deprecated spelling `smart_money_flow_detected` delivers the same object until its sunset on 2027-02-01 (#29352). */
|
|
4622
4691
|
export type SharpMoneyFlowDetectedData = {
|
|
4623
4692
|
/** Polymarket condition id of the market. */
|
|
@@ -4850,7 +4919,7 @@ export type SuspiciousTradeFlaggedData = {
|
|
|
4850
4919
|
/** Fill price of the flagged trade. */
|
|
4851
4920
|
price: number;
|
|
4852
4921
|
};
|
|
4853
|
-
/** Optional current-game tennis facts from API-Tennis, aligned with live_score.scores display order. These facts have their own revision and expiry; Polymarket remains the source of sets, match status, period, and the outer live-score revision. New observations require corroborated identity, current set/games, and live state. Where Polymarket publishes no score (tennis doubles, whose live_score reads one 0-0 set throughout), the group binds on both pairs' names, the tour, the date and API-Tennis's live flag, and carries set_games, the provider's set score for the match. Cached responses and replayed frames may still carry expired facts, so clients must enforce expires_at. */
|
|
4922
|
+
/** Optional current-game tennis facts from API-Tennis, aligned with live_score.scores display order. These facts have their own revision and expiry; Polymarket remains the source of sets, match status, period, and the outer live-score revision, except on ITF singles, which Polymarket does not score: there API-Tennis supplies the whole live_score, bound on both players' names, the tournament and the date. New observations require corroborated identity, current set/games, and live state. Where Polymarket publishes no score (tennis doubles, whose live_score reads one 0-0 set throughout), the group binds on both pairs' names, the tour, the date and API-Tennis's live flag, and carries set_games, the provider's set score for the match. Cached responses and replayed frames may still carry expired facts, so clients must enforce expires_at. */
|
|
4854
4923
|
export type TennisPoints = {
|
|
4855
4924
|
source: "api_tennis";
|
|
4856
4925
|
/** API-Tennis match ID. This is not a Polymarket market or event ID. */
|
|
@@ -5009,7 +5078,7 @@ export type TraderBreakdowns = {
|
|
|
5009
5078
|
entry_price_analysis: TraderEntryPriceAnalysis;
|
|
5010
5079
|
};
|
|
5011
5080
|
export type TraderCategoryRecord = {
|
|
5012
|
-
/** Canonical category bucket, for example Soccer, Esports, Tennis. Esports is one bucket, and the Esports record carries its per-game records in games. */
|
|
5081
|
+
/** Canonical category bucket, for example Soccer, Esports, Tennis. Esports is one bucket, and the Esports record carries its per-game records in games. Every record carries its per-scope records (esports titles, soccer leagues, other sports' leagues) in scopes. */
|
|
5013
5082
|
category: string;
|
|
5014
5083
|
/** Markets in this category the wallet closed with a profit. */
|
|
5015
5084
|
wins: number;
|
|
@@ -5021,6 +5090,8 @@ export type TraderCategoryRecord = {
|
|
|
5021
5090
|
status: "measured" | "not_enough_data";
|
|
5022
5091
|
/** The wallet's record per esports title, busiest first. Present only on the Esports record, and only when the wallet has a settled market in at least one title; absent on every other category and on an Esports record whose markets are all in series that are not games (skin-price indices, streamer props) or carry no series. Absent means no per-game record, the same rule as an absent category. Each entry's decided is a subset of the Esports record's, read in the same statement from the same daily rebuild. */
|
|
5023
5092
|
games?: TraderEsportsGameRecord[];
|
|
5093
|
+
/** The wallet's record per scope of this category, busiest first: each esports title on the Esports record, each soccer league on the Soccer record (UEFA Champions League, LaLiga, Premier League, ...), and each registered league of another sport on its record (NBA, NFL, ATP, ...). The same records Pick of the Day and the holder chips name in category_win_rate_game. Present only when the wallet has a settled market in at least one scope; absent means no per-scope record, the same rule as an absent category. On the Esports record it lists the same titles as games, with the same counts. Each entry's decided is a subset of its record's, read in the same statement from the same daily rebuild. */
|
|
5094
|
+
scopes?: TraderCategoryScopeRecord[];
|
|
5024
5095
|
};
|
|
5025
5096
|
export type TraderCategoryRecords = {
|
|
5026
5097
|
/** Prefixed trader id (trd_<wallet>). */
|
|
@@ -5031,11 +5102,25 @@ export type TraderCategoryRecords = {
|
|
|
5031
5102
|
basis: "settled_markets_all_sizes";
|
|
5032
5103
|
/** Decided markets a category needs before win_rate is served. Published so a caller can apply its own sample rule to the raw counts. */
|
|
5033
5104
|
min_decided_for_win_rate: number;
|
|
5034
|
-
/** When the served records were last rebuilt (RFC3339, Z): the newest stamp among every row served, game rows included, which the daily rebuild writes in one transaction. Null when the wallet has no record at all. */
|
|
5105
|
+
/** When the served records were last rebuilt (RFC3339, Z): the newest stamp among every row served, game and scope rows included, which the daily rebuild writes in one transaction. Null when the wallet has no record at all. */
|
|
5035
5106
|
computed_at: string | null;
|
|
5036
|
-
/** One entry per canonical category with at least one decided market, ordered by decided descending then category. A category with no decided market is omitted. The Esports entry carries its per-game records in games. */
|
|
5107
|
+
/** One entry per canonical category with at least one decided market, ordered by decided descending then category. A category with no decided market is omitted. The Esports entry carries its per-game records in games, and every entry its per-scope records in scopes. */
|
|
5037
5108
|
records: TraderCategoryRecord[];
|
|
5038
5109
|
};
|
|
5110
|
+
export type TraderCategoryScopeRecord = {
|
|
5111
|
+
/** The stable key the scope's record is stored under: an esports series slug (league-of-legends, counter-strike), a soccer league's season-stripped series stem (ucl, la-liga, premier-league), or another sport's league stem (nba, nfl, atp). display_name is the label. */
|
|
5112
|
+
scope_key: string;
|
|
5113
|
+
/** The scope's name as Pick of the Day and every holder chip print it in category_win_rate_game: LoL, CS2, UEFA Champions League, LaLiga, NBA. Match a chip to this row by string equality. */
|
|
5114
|
+
display_name: string;
|
|
5115
|
+
/** Markets in this scope the wallet closed with a profit. */
|
|
5116
|
+
wins: number;
|
|
5117
|
+
/** Markets in this scope it closed with a profit or a loss. A subset of the parent record's decided: the two are read from the same daily rebuild. */
|
|
5118
|
+
decided: number;
|
|
5119
|
+
/** wins / decided in [0,1], truncated to four decimals. Null when status is not_enough_data. */
|
|
5120
|
+
win_rate: number | null;
|
|
5121
|
+
/** The same rule as the parent record: measured when decided cleared min_decided_for_win_rate, not_enough_data when the counts are real but the sample is under the floor. A chip on a market in this scope shows this row's rate when it is measured and the parent record's otherwise. */
|
|
5122
|
+
status: "measured" | "not_enough_data";
|
|
5123
|
+
};
|
|
5039
5124
|
/** Closing line value over one wallet's large trades in a window (#32517). */
|
|
5040
5125
|
export type TraderClv = {
|
|
5041
5126
|
/** Wallet address, lowercase. */
|
|
@@ -5721,6 +5806,8 @@ export type UpdateWebhookRequest = {
|
|
|
5721
5806
|
url?: string;
|
|
5722
5807
|
event_types?: WebhookEventType[];
|
|
5723
5808
|
trade_filters?: LargeTradeSubscriptionFilters;
|
|
5809
|
+
price_move_filters?: PriceMoveSubscriptionFilters;
|
|
5810
|
+
settlement_filters?: SettlementSubscriptionFilters;
|
|
5724
5811
|
enabled?: boolean;
|
|
5725
5812
|
};
|
|
5726
5813
|
export type Usage = {
|
|
@@ -5782,7 +5869,7 @@ export type WalletGradeChangedData = {
|
|
|
5782
5869
|
direction: "upgrade" | "downgrade";
|
|
5783
5870
|
/** Cohort skill index that drove the grade, 0 to 1. */
|
|
5784
5871
|
skill_index: number;
|
|
5785
|
-
/**
|
|
5872
|
+
/** The new grade's sort key, not a rating out of 100: the cohort percentile times 100, held inside the new grade's band. */
|
|
5786
5873
|
final_score: number;
|
|
5787
5874
|
/** The ranking date of the re-grade. */
|
|
5788
5875
|
date: string;
|
|
@@ -5817,6 +5904,10 @@ export type WebhookEndpoint = {
|
|
|
5817
5904
|
url: string;
|
|
5818
5905
|
event_types: WebhookEventType[];
|
|
5819
5906
|
trade_filters: LargeTradeSubscriptionFilters;
|
|
5907
|
+
/** The market_price_moved settings; null unless that event is subscribed. */
|
|
5908
|
+
price_move_filters: PriceMoveSubscriptionFilters | null;
|
|
5909
|
+
/** The market_settled settings as stored, defaults filled in; null unless that event is subscribed. */
|
|
5910
|
+
settlement_filters: SettlementSubscriptionFilters | null;
|
|
5820
5911
|
status: WebhookStatus;
|
|
5821
5912
|
verified_at: string | null;
|
|
5822
5913
|
verification_token_expires_at: string;
|
|
@@ -5839,7 +5930,7 @@ export type WebhookEventDescriptor = {
|
|
|
5839
5930
|
/** active: the event has a firing producer callsite. dormant: advertised and subscribable, but does not yet enqueue any delivery. */
|
|
5840
5931
|
status: "active" | "dormant";
|
|
5841
5932
|
};
|
|
5842
|
-
export type WebhookEventType = "large_trade_inserted_v2" | "large_trades_inserted" | "whale_trades_inserted" | "live_sports_updated" | "trader_synced" | "whale_trader_synced" | "large_positions_updated" | "wallet_grade_changed" | "suspicious_trade_flagged" | "insider_radar_flag_raised" | "sharp_money_flow_detected" | "smart_money_flow_detected" | "export_job_ready" | "export_job_failed" | "export_job_expired" | "export_job_cancelled";
|
|
5933
|
+
export type WebhookEventType = "large_trade_inserted_v2" | "large_trades_inserted" | "whale_trades_inserted" | "live_sports_updated" | "trader_synced" | "whale_trader_synced" | "large_positions_updated" | "wallet_grade_changed" | "suspicious_trade_flagged" | "insider_radar_flag_raised" | "sharp_money_flow_detected" | "smart_money_flow_detected" | "export_job_ready" | "export_job_failed" | "export_job_expired" | "export_job_cancelled" | "market_price_moved" | "market_settled";
|
|
5843
5934
|
export type WebhookRetryPolicy = {
|
|
5844
5935
|
max_attempts: 8;
|
|
5845
5936
|
terminal_status: "dead_letter";
|
|
@@ -6028,6 +6119,10 @@ export type WhaleDatasetTrade = {
|
|
|
6028
6119
|
status: "measured" | "in_play" | "pending" | "unavailable";
|
|
6029
6120
|
/** Set exactly when status is unavailable. The market's reasons (see MarketClose.unavailable_reason), plus anchor_stale (the kickoff moved after the close was captured) and outcome_unknown (the traded outcome is not known for this trade). */
|
|
6030
6121
|
unavailable_reason: "no_observation_in_lookback" | "provider_empty_window" | "provider_invalid_contract" | "capture_window_closed" | "no_game_start_time" | "not_one_sided_resolution" | "not_captured" | "close_token_mismatch" | "anchor_stale" | "outcome_unknown" | null;
|
|
6122
|
+
/** clv_cents - taker_fee_cents: the CLV after the fee the fill paid, cents per share. Set exactly when both are set. */
|
|
6123
|
+
clv_after_fees_cents: number | null;
|
|
6124
|
+
/** The fee the fill paid as taker, cents per share, from the exchange's on-chain record of the fill (the OrderFilled event in its Polygon receipt); the trader is its taker. Polymarket charges only takers, so a buy's fee adds to its cost and a sell's comes out of its proceeds, and either way it lowers the CLV by this amount. Includes any builder fee an app added; excludes maker and taker rebates, which Polymarket pays later and no fill records. Set whatever status is; null until the record is decoded (about a minute after the trade) and for trades before 2026-08-16. */
|
|
6125
|
+
taker_fee_cents: number | null;
|
|
6031
6126
|
};
|
|
6032
6127
|
};
|
|
6033
6128
|
/**
|
|
@@ -6044,6 +6139,8 @@ export interface WebhookEventData {
|
|
|
6044
6139
|
large_trade_inserted_v2: LargeTradeInsertedV2Data;
|
|
6045
6140
|
large_trades_inserted: LargeTradesInsertedData;
|
|
6046
6141
|
live_sports_updated: LiveSportsUpdatedData;
|
|
6142
|
+
market_price_moved: MarketPriceMovedData;
|
|
6143
|
+
market_settled: MarketSettledData;
|
|
6047
6144
|
sharp_money_flow_detected: SharpMoneyFlowDetectedData;
|
|
6048
6145
|
smart_money_flow_detected: SharpMoneyFlowDetectedData;
|
|
6049
6146
|
suspicious_trade_flagged: SuspiciousTradeFlaggedData;
|
|
@@ -6478,7 +6575,12 @@ export interface OperationData {
|
|
|
6478
6575
|
price_basis: "midpoint" | "last_trade" | null;
|
|
6479
6576
|
price_observed_at: string | null;
|
|
6480
6577
|
status: "observed" | "no_orderbook" | "unavailable";
|
|
6481
|
-
book_unavailable_reason: "cache_miss" | "stream_capacity" | "no_orderbook" | "missing_provider_token_id" | null;
|
|
6578
|
+
book_unavailable_reason: "cache_miss" | "stream_capacity" | "no_orderbook" | "missing_provider_token_id" | "not_streamed" | "cache_unavailable" | null;
|
|
6579
|
+
book_source: "clob_stream" | "clob_rest" | null;
|
|
6580
|
+
book_depth_within_2c: {
|
|
6581
|
+
ask_usd: number;
|
|
6582
|
+
bid_usd: number;
|
|
6583
|
+
} | null;
|
|
6482
6584
|
};
|
|
6483
6585
|
})[];
|
|
6484
6586
|
platform?: string;
|
|
@@ -6548,6 +6650,45 @@ export interface OperationData {
|
|
|
6548
6650
|
listLeaderboard: LeaderboardEntry[];
|
|
6549
6651
|
listLeaderboardLeagues: LeaderboardLeagues;
|
|
6550
6652
|
listPositions: Position[];
|
|
6653
|
+
listProps: ({
|
|
6654
|
+
competitors: string[];
|
|
6655
|
+
condition_id: string;
|
|
6656
|
+
event_slug: string;
|
|
6657
|
+
id: string;
|
|
6658
|
+
league: string;
|
|
6659
|
+
line: number | null;
|
|
6660
|
+
outcomes: ({
|
|
6661
|
+
index: number;
|
|
6662
|
+
label?: string;
|
|
6663
|
+
token_id?: string;
|
|
6664
|
+
quote?: {
|
|
6665
|
+
best_ask: number | null;
|
|
6666
|
+
best_bid: number | null;
|
|
6667
|
+
book_observed_at: string | null;
|
|
6668
|
+
book_unavailable_reason: "cache_miss" | "stream_capacity" | "not_streamed" | "no_orderbook" | "missing_provider_token_id" | "cache_unavailable" | null;
|
|
6669
|
+
price: number | null;
|
|
6670
|
+
price_basis: "midpoint" | "last_trade" | null;
|
|
6671
|
+
price_observed_at: string | null;
|
|
6672
|
+
status: "observed" | "no_orderbook" | "unavailable";
|
|
6673
|
+
book_source: "clob_stream" | "clob_rest" | null;
|
|
6674
|
+
book_depth_within_2c: {
|
|
6675
|
+
ask_usd: number;
|
|
6676
|
+
bid_usd: number;
|
|
6677
|
+
} | null;
|
|
6678
|
+
};
|
|
6679
|
+
})[];
|
|
6680
|
+
player: {
|
|
6681
|
+
name: string;
|
|
6682
|
+
} | null;
|
|
6683
|
+
starts_at: string | null;
|
|
6684
|
+
stat: string;
|
|
6685
|
+
status: string;
|
|
6686
|
+
title: string | null;
|
|
6687
|
+
game_event_slug: string;
|
|
6688
|
+
group_item_title: string | null;
|
|
6689
|
+
player_unavailable_reason: "missing_provider_title" | null;
|
|
6690
|
+
resolved_at: string | null;
|
|
6691
|
+
})[];
|
|
6551
6692
|
listSharpMoneyFlows: SmartMoneyFlowMarket[];
|
|
6552
6693
|
listSmartMoneyFlows: SmartMoneyFlowMarket[];
|
|
6553
6694
|
listSuspiciousTrades: SuspiciousTrade[];
|
|
@@ -6851,10 +6992,10 @@ export interface OperationQuery {
|
|
|
6851
6992
|
getPickOfTheDayStats: {
|
|
6852
6993
|
/** full (default) is every section. summary returns view, sections and every section except the five that grow with the record: series, days, categories, months and voids. In summary and sections bodies hit_rate carries no series; series is its own top-level section. Ignored when sections is sent. Any other value returns 400 bad_request with error.param=view. */
|
|
6853
6994
|
view?: "full" | "summary";
|
|
6854
|
-
/** Exactly the sections to return, in the body's order whatever the request order. Repeatable and comma-separated: hit_rate, series, market_expectations, outcome_stats, days, categories, sports, tiers,
|
|
6855
|
-
sections?: ("hit_rate" | "series" | "market_expectations" | "outcome_stats" | "days" | "categories" | "sports" | "tiers" | "
|
|
6995
|
+
/** Exactly the sections to return, in the body's order whatever the request order. Repeatable and comma-separated: hit_rate, series, market_expectations, outcome_stats, days, categories, sports, tiers, months, price_bands, market_types, total_sides, streaks, records, voids. The body names them in sections and carries view=sections. An unrecognized name returns 400 bad_request with error.param=sections rather than being ignored. */
|
|
6996
|
+
sections?: ("hit_rate" | "series" | "market_expectations" | "outcome_stats" | "days" | "categories" | "sports" | "tiers" | "months" | "price_bands" | "market_types" | "total_sides" | "streaks" | "records" | "voids")[];
|
|
6856
6997
|
/** Backward-compatible bracket alias for sections, for clients that emit array keys. Repeatable and comma-separated, with the same names. */
|
|
6857
|
-
"sections[]"?: ("hit_rate" | "series" | "market_expectations" | "outcome_stats" | "days" | "categories" | "sports" | "tiers" | "
|
|
6998
|
+
"sections[]"?: ("hit_rate" | "series" | "market_expectations" | "outcome_stats" | "days" | "categories" | "sports" | "tiers" | "months" | "price_bands" | "market_types" | "total_sides" | "streaks" | "records" | "voids")[];
|
|
6858
6999
|
};
|
|
6859
7000
|
getPlatforms: Record<string, never>;
|
|
6860
7001
|
getPositionTimeline: {
|
|
@@ -6910,6 +7051,12 @@ export interface OperationQuery {
|
|
|
6910
7051
|
wallet?: string;
|
|
6911
7052
|
/** Filter LargeTradeInsertedV2 frames to trades at or above this USD notional. Positive decimal with at most six places; other event types are excluded when set. */
|
|
6912
7053
|
min_size?: string;
|
|
7054
|
+
/** Filter MarketPriceMoved frames to these event slug league prefixes (comma-separated, case-insensitive, e.g. nba,epl). Other event types are excluded when set. */
|
|
7055
|
+
league?: string;
|
|
7056
|
+
/** Filter MarketPriceMoved frames to the one level step per market and window that crosses this threshold, in whole cents (2 to 50): previous_level_cents < min_move_cents <= level_cents, the market_price_moved webhook rule. Other event types are excluded when set. */
|
|
7057
|
+
min_move_cents?: number;
|
|
7058
|
+
/** Filter MarketPriceMoved frames to moves measured over this window. Other event types are excluded when set. */
|
|
7059
|
+
window_seconds?: 60 | 120 | 300 | 900;
|
|
6913
7060
|
};
|
|
6914
7061
|
getSuspiciousTrade: Record<string, never>;
|
|
6915
7062
|
getTrader: {
|
|
@@ -6921,7 +7068,7 @@ export interface OperationQuery {
|
|
|
6921
7068
|
max_age_s?: number;
|
|
6922
7069
|
};
|
|
6923
7070
|
getTraderCategoryRecords: {
|
|
6924
|
-
/** Filter to one canonical category, matched through the same rollup every other category surface uses: soccer, EPL and champions league all reach Soccer, every esports label folds into Esports, and football is AMERICAN football and reaches Football. A filter that reaches Esports returns the Esports record with all of its games; a game is not a filter of its own, so ask for
|
|
7071
|
+
/** Filter to one canonical category, matched through the same rollup every other category surface uses: soccer, EPL and champions league all reach Soccer, every esports label folds into Esports, and football is AMERICAN football and reaches Football. A filter that reaches Esports returns the Esports record with all of its games and scopes, and one that reaches Soccer returns the Soccer record with every league in scopes; a game or a league is not a filter of its own, so ask for its category and read games or scopes. A sports or esports category the wallet has no record in answers 200 with an empty records array, never 404. Sports and esports only (#27311): a category outside them, or a value that reaches no category, returns 400 bad_request with param category and names the accepted buckets. The word sports, in any casing, matches every sport but Esports, the provider's catch-all Sports category (cycling, lacrosse) included: use esports for Esports alone, or omit category for both (#32657). */
|
|
6925
7072
|
category?: string;
|
|
6926
7073
|
};
|
|
6927
7074
|
getTraderClv: {
|
|
@@ -6929,7 +7076,7 @@ export interface OperationQuery {
|
|
|
6929
7076
|
from?: string;
|
|
6930
7077
|
/** Exclusive RFC3339 upper bound on the trade time. Defaults to now; must be after from, and at most 366 days after it. */
|
|
6931
7078
|
to?: string;
|
|
6932
|
-
/** Minimum trade size in USD. The capture floor was 3,000 USD before 2026-07-06 and 10,000 USD from then (1,000 USD in earnings markets), so 10000 gives one size rule across the whole archive. From 2026-09-23 a fill must also be at least 0.1% of its market's recorded traded volume (Polymarket's own share count); rows written before that date were not re-filtered. */
|
|
7079
|
+
/** Minimum trade size in USD. The capture floor was 3,000 USD before 2026-07-06 and 10,000 USD from then (1,000 USD in earnings markets), so 10000 gives one size rule across the whole archive. From 2026-09-23 a fill must also be at least 0.1% of its market's recorded traded volume (Polymarket's own share count), where a positive volume is recorded for the market; a market without one keeps the fill, and rows written before that date were not re-filtered. */
|
|
6933
7080
|
min_size?: number;
|
|
6934
7081
|
/** Filter by market category (case-insensitive). A canonical bucket name (e.g. Basketball) matches every provider member that folds into it (NBA, WNBA, NCAAB); a raw provider value also resolves to its bucket. Sports and esports only (#27430): a category outside them returns 400 bad_request with param category and names the accepted buckets. The word sports, in any casing, matches every sport but Esports, the provider's catch-all Sports category (cycling, lacrosse) included: use esports for Esports alone, or omit category for both (#32657). */
|
|
6935
7082
|
category?: string;
|
|
@@ -7008,11 +7155,11 @@ export interface OperationQuery {
|
|
|
7008
7155
|
"expand[]"?: ("sharp_money" | "quotes" | "trading_terms")[];
|
|
7009
7156
|
};
|
|
7010
7157
|
listGames: {
|
|
7011
|
-
/** Canonical sport bucket, case-insensitive, with - and _ read as a space: table-tennis and Table Tennis are the same bucket. Omit for every covered sport. A bucket this deployment does not serve returns an empty page. */
|
|
7158
|
+
/** Canonical sport bucket, case-insensitive, with - and _ read as a space: table-tennis and Table Tennis are the same bucket. Omit for every covered sport. A bucket this deployment does not serve returns an empty page, not an error, and the response names sport in X-Query-Unmatched; coverage.sports lists the served buckets. */
|
|
7012
7159
|
sport?: string;
|
|
7013
7160
|
/** League tag, case-insensitive, as this list's coverage.leagues spells it (GET /api/v1/coverage lists no leagues): nfl, epl, cs2, euroleague, cbb, cwbb. EuroLeague games use sport=Basketball and league=euroleague; NCAA men's and women's college basketball games use sport=Basketball with league=cbb and league=cwbb. Omit for every league inside the selected sports. */
|
|
7014
7161
|
league?: string;
|
|
7015
|
-
/** Keep only games in this state. ended, cancelled and postponed also list finished games that have left the live board, read from their stored records, for kickoffs within starts_after..starts_before (default: the 7 days before now). Without status, or with any other state, the list is the live and upcoming board. A value outside the enum
|
|
7162
|
+
/** Keep only games in this state. ended, cancelled and postponed also list finished games that have left the live board, read from their stored records, for kickoffs within starts_after..starts_before (default: the 7 days before now). Without status, or with any other state, the list is the live and upcoming board. A value outside the enum answers 400 invalid_query with error.param=status, and its message lists the accepted values: upcoming games are scheduled. */
|
|
7016
7163
|
status?: "scheduled" | "live" | "paused" | "ended" | "postponed" | "cancelled" | "suspended" | "delayed" | "unknown";
|
|
7017
7164
|
/** RFC 3339 instant. Keep only games whose kickoff is at or after it. Games with no published kickoff are excluded whenever either bound is set. With a finished status, the stored games' look-back starts here; omitted, it starts 7 days before starts_before, and nothing caps an earlier value. */
|
|
7018
7165
|
starts_after?: string;
|
|
@@ -7026,7 +7173,7 @@ export interface OperationQuery {
|
|
|
7026
7173
|
cursor?: string;
|
|
7027
7174
|
/** Backward-compatible alias for expand. Repeatable: sharp_money, settlement. */
|
|
7028
7175
|
"expand[]"?: ("sharp_money" | "settlement")[];
|
|
7029
|
-
/** sharp_money adds each game's sharp_money, the GameSharpMoney object GET /api/v1/games/{event_slug}/sharp-money returns, read from the sport board's cached aggregate: one board read per sport on the page, never a per-game compute. A game the board did not evaluate carries status not_computed (read the per-game route for it); a sport whose aggregate could not be read carries status unavailable while the rest of the page is served. Pro and Max only; adds 3 to the request cost. settlement adds settlement to each winner market, the GameMarketSettlement block GET /api/v1/games/{event_slug}/markets serves, from the same per-game store. It never waits for Polymarket: a game not read lately carries status unavailable
|
|
7176
|
+
/** sharp_money adds each game's sharp_money, the GameSharpMoney object GET /api/v1/games/{event_slug}/sharp-money returns, read from the sport board's cached aggregate: one board read per sport on the page, never a per-game compute. A game the board did not evaluate carries status not_computed (read the per-game route for it); a sport whose aggregate could not be read carries status unavailable while the rest of the page is served. Pro and Max only; adds 3 to the request cost. settlement adds settlement to each winner market, the GameMarketSettlement block GET /api/v1/games/{event_slug}/markets serves, from the same per-game store. It never waits for Polymarket: a settled market carries its recorded settlement even on a game not read lately, and any other market of such a game carries status unavailable while its read starts, so a read a moment later may answer. Every plan; adds 2 to the request cost. Repeatable; the two combine. */
|
|
7030
7177
|
expand?: ("sharp_money" | "settlement")[];
|
|
7031
7178
|
};
|
|
7032
7179
|
listGameTrades: {
|
|
@@ -7080,7 +7227,7 @@ export interface OperationQuery {
|
|
|
7080
7227
|
limit?: number;
|
|
7081
7228
|
/** Pagination cursor from previous response's next_cursor. Prefix: wth_. URL-encode when replaying as a query parameter. */
|
|
7082
7229
|
cursor?: string;
|
|
7083
|
-
/** Minimum trade size in USD. The capture floor was 3,000 USD before 2026-07-06 and 10,000 USD from then (1,000 USD in earnings markets), so 10000 gives one size rule across the whole archive. From 2026-09-23 a fill must also be at least 0.1% of its market's recorded traded volume (Polymarket's own share count); rows written before that date were not re-filtered. */
|
|
7230
|
+
/** Minimum trade size in USD. The capture floor was 3,000 USD before 2026-07-06 and 10,000 USD from then (1,000 USD in earnings markets), so 10000 gives one size rule across the whole archive. From 2026-09-23 a fill must also be at least 0.1% of its market's recorded traded volume (Polymarket's own share count), where a positive volume is recorded for the market; a market without one keeps the fill, and rows written before that date were not re-filtered. */
|
|
7084
7231
|
min_size?: number;
|
|
7085
7232
|
/** Exact raw provider condition_id. Unknown markets return an empty list. */
|
|
7086
7233
|
condition_id?: string;
|
|
@@ -7136,7 +7283,7 @@ export interface OperationQuery {
|
|
|
7136
7283
|
listLeaderboard: {
|
|
7137
7284
|
/** Maximum number of ranked traders to return. Out-of-range values are clamped to 1..100. */
|
|
7138
7285
|
limit?: number;
|
|
7139
|
-
/** Opaque lbv1_ pagination cursor from a prior response. It binds the finite score/address boundary to the
|
|
7286
|
+
/** Opaque lbv1_ pagination cursor from a prior response. It binds the finite score/address boundary to the effective category/strategy filters, and on a sorted page to its sort, dir and activity, and it names the leaderboard generation it was read at. A cursor from another sort or dir is a 400 bad_request on cursor; one from another activity, category or strategy is cursor_expired. A cursor from an earlier generation continues after its boundary in the current ranking (since 2026-11-07, #33377); meta.continued_from_generation is set when the ranking moved under it. Legacy, malformed, non-finite, and unsupported-version cursors are rejected. */
|
|
7140
7287
|
cursor?: string;
|
|
7141
7288
|
/** Filter by category: a sport or esports bucket, matched case-insensitively. League values fold into their sport (NBA and NCAAB into Basketball, NFL into Football). Sports and esports only (#27306): a category outside them returns 400 bad_request with param category and names the accepted buckets. The word sports, in any casing, matches every sport but Esports, the provider's catch-all Sports category (cycling, lacrosse) included: use esports for Esports alone, or omit category for both (#32657). */
|
|
7142
7289
|
category?: string;
|
|
@@ -7172,6 +7319,34 @@ export interface OperationQuery {
|
|
|
7172
7319
|
/** Filter by the binary outcome side. `yes` maps to outcome_index=0, `no` to outcome_index=1. */
|
|
7173
7320
|
side?: "yes" | "no";
|
|
7174
7321
|
};
|
|
7322
|
+
listProps: {
|
|
7323
|
+
/** League tag as GET /api/v1/games coverage.leagues spells it, for example nfl or nba. Matched case-insensitively. */
|
|
7324
|
+
league: string;
|
|
7325
|
+
/** RFC 3339 kickoff bound. A game with no published kickoff is excluded whenever either bound is set. */
|
|
7326
|
+
starts_after?: string;
|
|
7327
|
+
/** RFC 3339 kickoff bound, inclusive. */
|
|
7328
|
+
starts_before?: string;
|
|
7329
|
+
/** Part of player.name, ignoring case and accents: jokic matches Nikola Jokić. A row with no player does not match. */
|
|
7330
|
+
player?: string;
|
|
7331
|
+
/** Provider sportsMarketType values to keep, case-insensitive, for example passing_yards or points. Repeat the parameter or send a comma-separated list. An unknown type returns an empty page. */
|
|
7332
|
+
stat?: string[];
|
|
7333
|
+
/** Bracket alias for stat, as expand[] is for expand. Repeatable; same values. */
|
|
7334
|
+
"stat[]"?: string[];
|
|
7335
|
+
/** active (default), closed, or all. closed means the provider closed the market or it resolved. */
|
|
7336
|
+
status?: "active" | "closed" | "all";
|
|
7337
|
+
/** Keep only props with an outcome whose cached best ask less best bid is at most this many cents: above 0, at most 100, in steps of 0.01. The books are the ones expand=quotes serves, read from the cache with no request-path CLOB call. A prop whose book is not cached yet is left out of data and counted on coverage.rows_without_book; the board reads its league's books behind the response, so a read a few seconds later can judge it. A cursor never revisits a prop a page passed over, whether its book was wider or not cached yet, so when coverage.rows_without_book is above 0, read from the first page again after a few seconds to judge those props; the board reads books for active props only, so a closed prop, or one whose outcome has no provider token id yet, stays unjudged. When the book cache cannot be read for the first prop a page must judge, the read answers 503 with error.reason read_model_warming and Retry-After, not an empty page that repeats its cursor. */
|
|
7338
|
+
max_spread_c?: number;
|
|
7339
|
+
/** Keep only props with an outcome whose cached book holds at least this many USD on each side within 2 cents of its midpoint: bids at or above the midpoint minus 0.02 and asks at or below the midpoint plus 0.02, each level's price times size, from the whole book. A whole number from 1 to 10000000, the measure the market_price_moved webhook filter of the same name uses; expand=quotes serves the two sums as book_depth_within_2c. With max_spread_c, one outcome must meet both. The books are read from the cache with no request-path CLOB call. A prop whose book or depth is not cached yet is left out of data and counted on coverage.rows_without_book; the board reads its league's books behind the response, so a read a few seconds later can judge it. A cursor never revisits a prop a page passed over, so when coverage.rows_without_book is above 0, read from the first page again after a few seconds to judge those props; the board reads books for active props only, so a closed prop, or one whose outcome has no provider token id yet, stays unjudged. When the book cache cannot be read for the first prop a page must judge, the read answers 503 with error.reason read_model_warming and Retry-After, not an empty page that repeats its cursor. */
|
|
7340
|
+
min_book_usd_within_2c?: number;
|
|
7341
|
+
/** Page size. Out-of-range values are clamped to 1..200. */
|
|
7342
|
+
limit?: number;
|
|
7343
|
+
/** Opaque prp_v1_ cursor from next_cursor, sent with the same filters. A cursor this endpoint did not issue returns 400 with error.param=cursor. */
|
|
7344
|
+
cursor?: string;
|
|
7345
|
+
/** quotes adds each outcome's cached quote, as on GET /api/v1/games/{event_slug}/markets; it adds 1 to the cost, on every plan. Repeatable: quotes. */
|
|
7346
|
+
expand?: "quotes"[];
|
|
7347
|
+
/** Backward-compatible alias for expand. Repeatable: quotes. */
|
|
7348
|
+
"expand[]"?: "quotes"[];
|
|
7349
|
+
};
|
|
7175
7350
|
listSharpMoneyFlows: {
|
|
7176
7351
|
/** Lookback window for grade-filtered whale flow aggregation. */
|
|
7177
7352
|
timeframe?: "1h" | "4h" | "24h" | "7d";
|
|
@@ -7561,6 +7736,7 @@ export interface OperationPath {
|
|
|
7561
7736
|
listLeaderboard: Record<string, never>;
|
|
7562
7737
|
listLeaderboardLeagues: Record<string, never>;
|
|
7563
7738
|
listPositions: Record<string, never>;
|
|
7739
|
+
listProps: Record<string, never>;
|
|
7564
7740
|
listSharpMoneyFlows: Record<string, never>;
|
|
7565
7741
|
listSmartMoneyFlows: Record<string, never>;
|
|
7566
7742
|
listSuspiciousTrades: Record<string, never>;
|
|
@@ -7726,6 +7902,7 @@ export interface OperationBody {
|
|
|
7726
7902
|
listLeaderboard: never;
|
|
7727
7903
|
listLeaderboardLeagues: never;
|
|
7728
7904
|
listPositions: never;
|
|
7905
|
+
listProps: never;
|
|
7729
7906
|
listSharpMoneyFlows: never;
|
|
7730
7907
|
listSmartMoneyFlows: never;
|
|
7731
7908
|
listSuspiciousTrades: never;
|
|
@@ -8207,6 +8384,19 @@ export interface OperationResponse {
|
|
|
8207
8384
|
};
|
|
8208
8385
|
meta: ResponseMeta;
|
|
8209
8386
|
};
|
|
8387
|
+
listProps: {
|
|
8388
|
+
as_of: string;
|
|
8389
|
+
data: OperationData["listProps"];
|
|
8390
|
+
has_more: boolean;
|
|
8391
|
+
league: string;
|
|
8392
|
+
meta: ResponseMeta;
|
|
8393
|
+
next_cursor?: string;
|
|
8394
|
+
object: string;
|
|
8395
|
+
coverage: {
|
|
8396
|
+
sources_unavailable: string[];
|
|
8397
|
+
rows_without_book: number | null;
|
|
8398
|
+
};
|
|
8399
|
+
};
|
|
8210
8400
|
listSharpMoneyFlows: {
|
|
8211
8401
|
object: "list";
|
|
8212
8402
|
data: OperationData["listSharpMoneyFlows"];
|