Api Endpoint

Scrapebench API

Live Kalshi and Polymarket prediction-market odds by keyword, category or city, one schema for both venues, with the price spread when the same question trades on both. Snapshot refreshed hourly from the exchanges' public APIs.

Open interactive test console

Offering

Provider
api.scrapebench.dev
Method
POST
Offering type
Api Endpoint
Transport type
http
Category
Prediction Markets
Delivery
Not provided
Pricing model
Not provided
x402 version
2

Endpoint context

URL
https://api.scrapebench.dev/v1/prediction-markets
MIME type
Not provided
First seen
2026-10-16T04:15:40.848Z
Last seen
Tags
prediction-markets, kalshi, polymarket, odds, Finance

Payment pricing

x402 payment terms are the authoritative price for calling this endpoint.

Payment option 1
0.06 USDC
Atomic price: 60000 · Network: eip155:8453 · Asset: USDC · Scheme: exact
Raw x402 terms
[
  {
    "scheme": "exact",
    "network": "eip155:8453",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "60000",
    "payTo": "0x1bd1e9431c00ba6ff992a3dda541282079d02abf"
  }
]

Observed health

Status
Reachable
Latest latency
305 ms
Average latency
775 ms
HTTP status
405
Last checked
Reachability
100% over 14 checks

Latency is measured to the first response headers. A reachable result does not verify response accuracy or merchant identity.

Input schema

{
  "additionalProperties": false,
  "properties": {
    "body": {
      "properties": {
        "categories": {
          "description": "Kalshi categories, e.g. 'Economics', 'Climate and Weather'. Polymarket publishes none, so setting this returns Kalshi markets only.",
          "items": {
            "maxLength": 100,
            "type": "string"
          },
          "maxItems": 20,
          "title": "Categories",
          "type": "array"
        },
        "min_volume": {
          "default": 0,
          "description": "Drop markets that traded less than this (contracts on Kalshi, USD on Polymarket).",
          "minimum": 0,
          "title": "Min Volume",
          "type": "number"
        },
        "queries": {
          "description": "More keywords; a market matching any of them (or query) is returned.",
          "items": {
            "maxLength": 100,
            "type": "string"
          },
          "maxItems": 20,
          "title": "Queries",
          "type": "array"
        },
        "query": {
          "anyOf": [
            {
              "maxLength": 100,
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Case-insensitive substring over question, subtitle, series, ticker, event and weather city, e.g. 'fed', 'bitcoin', 'new york'.",
          "title": "Query"
        },
        "series": {
          "description": "Kalshi series tickers, e.g. 'KXHIGHNY' (NYC daily high) or 'KXFEDDECISION'.",
          "items": {
            "maxLength": 100,
            "type": "string"
          },
          "maxItems": 20,
          "title": "Series",
          "type": "array"
        },
        "sort": {
          "default": "volume",
          "description": "volume: most traded first (default); close_time: soonest to close first.",
          "enum": [
            "volume",
            "close_time"
          ],
          "title": "Sort",
          "type": "string"
        },
        "venue": {
          "default": "both",
          "description": "Which exchange to search: both (default), kalshi or polymarket.",
          "enum": [
            "both",
            "kalshi",
            "polymarket"
          ],
          "title": "Venue",
          "type": "string"
        }
      },
      "title": "Input",
      "type": "object"
    },
    "bodyType": {
      "enum": [
        "json",
        "form-data",
        "text"
      ],
      "type": "string"
    },
    "method": {
      "enum": [
        "POST",
        "PUT",
        "PATCH"
      ],
      "type": "string"
    },
    "type": {
      "const": "http",
      "type": "string"
    }
  },
  "required": [
    "type",
    "method",
    "bodyType",
    "body"
  ],
  "type": "object"
}

Output schema

{
  "properties": {
    "example": {
      "properties": {
        "next_page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "description": "Page to request next, or null when this is the last.",
          "title": "Next Page"
        },
        "page": {
          "description": "Zero-based page number of this response.",
          "title": "Page",
          "type": "integer"
        },
        "page_size": {
          "description": "Most rows a page can hold; one page is one price.",
          "title": "Page Size",
          "type": "integer"
        },
        "rows": {
          "description": "Data rows, or free Notice rows explaining a gap.",
          "items": {
            "anyOf": [
              {
                "additionalProperties": false,
                "properties": {
                  "category": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Kalshi category; null on Polymarket, which publishes none.",
                    "title": "Category"
                  },
                  "city": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Weather markets: the city in the settlement rules, else null.",
                    "title": "City"
                  },
                  "close_time": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "When trading closes (ISO 8601, UTC).",
                    "title": "Close Time"
                  },
                  "counterpart_market_id": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "market_id of the same question on the other venue, when joined.",
                    "title": "Counterpart Market Id"
                  },
                  "event_ticker": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Kalshi event ticker, or the Polymarket event id.",
                    "title": "Event Ticker"
                  },
                  "implied_probability": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Last trade, else the bid/ask mid; null (never 0) when the market has neither.",
                    "title": "Implied Probability"
                  },
                  "liquidity": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Resting liquidity in USD as the venue reports it.",
                    "title": "Liquidity"
                  },
                  "market_id": {
                    "description": "The venue's market id (Kalshi ticker, Polymarket numeric id).",
                    "title": "Market Id",
                    "type": "string"
                  },
                  "market_url": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Public market page (Polymarket); null on Kalshi, whose API states no page slug.",
                    "title": "Market Url"
                  },
                  "matched_on": {
                    "description": "Venues carrying this question: one, or both when joined.",
                    "items": {
                      "type": "string"
                    },
                    "title": "Matched On",
                    "type": "array"
                  },
                  "no_price": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Price of NO in USD (0-1).",
                    "title": "No Price"
                  },
                  "open_interest": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Open contracts (Kalshi); null on Polymarket, which states it per event.",
                    "title": "Open Interest"
                  },
                  "question": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "The market's question as the venue words it.",
                    "title": "Question"
                  },
                  "scraped_at": {
                    "description": "UTC timestamp of the read.",
                    "format": "date-time",
                    "title": "Scraped At",
                    "type": "string"
                  },
                  "series": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Kalshi series ticker, e.g. KXHIGHNY; null on Polymarket.",
                    "title": "Series"
                  },
                  "source_url": {
                    "description": "The URL or endpoint this record was read from.",
                    "title": "Source Url",
                    "type": "string"
                  },
                  "spread": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Kalshi yes_price minus Polymarket yes_price when joined, else null.",
                    "title": "Spread"
                  },
                  "status": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Market status as the venue reports it, e.g. active.",
                    "title": "Status"
                  },
                  "subtitle": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Outcome label, e.g. a bracket '76° or below' or a candidate.",
                    "title": "Subtitle"
                  },
                  "ticker": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Kalshi market ticker, or the Polymarket market slug.",
                    "title": "Ticker"
                  },
                  "venue": {
                    "description": "Exchange: kalshi or polymarket.",
                    "title": "Venue",
                    "type": "string"
                  },
                  "volume": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Lifetime volume: contracts on Kalshi, USD on Polymarket.",
                    "title": "Volume"
                  },
                  "yes_price": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Price of YES in USD (0-1); Kalshi's ask, Polymarket's quoted price.",
                    "title": "Yes Price"
                  }
                },
                "required": [
                  "source_url",
                  "venue",
                  "market_id"
                ],
                "title": "Output",
                "type": "object"
              },
              {
                "additionalProperties": false,
                "description": "A free row explaining why a page has no (or partial) data. Never charged.",
                "properties": {
                  "notice": {
                    "description": "Human-readable reason, and what to send instead if the input was the problem.",
                    "title": "Notice",
                    "type": "string"
                  },
                  "notice_type": {
                    "default": "input_error",
                    "description": "Machine-readable reason: input_error, no_results, blocked, truncated, source_changed, not_ready or stale.",
                    "title": "Notice Type",
                    "type": "string"
                  },
                  "scraped_at": {
                    "description": "UTC timestamp of the read.",
                    "format": "date-time",
                    "title": "Scraped At",
                    "type": "string"
                  },
                  "source_url": {
                    "default": "",
                    "description": "Empty: a notice is about the request, not about a page.",
                    "title": "Source Url",
                    "type": "string"
                  }
                },
                "required": [
                  "notice"
                ],
                "title": "Notice",
                "type": "object"
              }
            ]
          },
          "title": "Rows",
          "type": "array"
        },
        "service": {
          "description": "The service that answered.",
          "title": "Service",
          "type": "string"
        }
      },
      "required": [
        "service",
        "page",
        "page_size",
        "next_page",
        "rows"
      ],
      "title": "PredictionMarketsPage",
      "type": "object"
    },
    "type": {
      "type": "string"
    }
  },
  "required": [
    "type"
  ],
  "type": "object"
}