> Documentation index: https://pmdata.dev/llms.txt. Full docs in one file: https://pmdata.dev/llms-full.txt

# Predict.fun

Source: https://pmdata.dev/docs/historical-data-details/predict-fun

> Predict.fun historical data coverage, downloads, and collection details.

Coverage start date: **2026-09-10**.

## Available data

| Data type | Contents |
| --- | --- |
| `l2` | Order book of one market for one UTC day, from the Predict.fun WebSocket. Every row is a complete aggregated book. |
| `onchain_fills` | Fills of one market for one UTC day, recorded on BNB Smart Chain, with maker and taker wallets. |
| `lifecycle` | Market status, trading status and market changes for every market, one file per UTC day, from the Predict.fun WebSocket. |

There is no `trades` data type: Predict.fun's WebSocket has no public trade channel; fills come from the chain as `onchain_fills`. See the Predict.fun [L2](https://pmdata.dev/docs/schemas/predict-fun/l2), [on-chain fills](https://pmdata.dev/docs/schemas/predict-fun/onchain-fills) and [lifecycle](https://pmdata.dev/docs/schemas/predict-fun/lifecycle) schemas for column definitions.

## API access and data format

Send your API key in the `api_key` request header. Get a free key at [pmdata.dev/app](https://pmdata.dev/app).

Each file costs one download. A file that does not exist returns `404` and costs nothing.

Predict.fun is a separate product from Plus: Polymarket. Free accounts can download Predict.fun data older than 3 weeks (21 days): 600 downloads at sign-up, then 50 per month, counted separately from Polymarket. Data from the last 3 weeks needs [Plus: Predict.fun](https://pmdata.dev/pricing#predict-fun); Plus: Polymarket does not include it. Plus: Predict.fun also includes [Chainlink](https://pmdata.dev/docs/historical-data-details/chainlink) data.

### Market API

Download one market's Parquet file for one data type and UTC date. `market_id` is Predict.fun's numeric market id. Markets and dates PMData has recorded: see the [markets catalog](https://pmdata.dev/docs/schemas/predict-fun/markets-catalog).

`https://api.pmdata.dev/v1/predict_fun/{data_type}/{YYYY}/{MM}/{DD}/{market_id}.parquet`

Response schema by `data_type`: [`l2`](https://pmdata.dev/docs/schemas/predict-fun/l2) · [`onchain_fills`](https://pmdata.dev/docs/schemas/predict-fun/onchain-fills)

```python

market_id = 123  # Predict.fun numeric market id
date = "2026/10/01"  # UTC date, YYYY/MM/DD
data_type = "l2"  # l2, onchain_fills

url = (
    f"https://api.pmdata.dev/v1/predict_fun/{data_type}/"
    f"{date}/{market_id}.parquet"
)

df = pd.read_parquet(
    url,
    storage_options={
        "api_key": "<YOUR_API_KEY>",
        "User-Agent": "Mozilla/5.0",
    },
)
print(df.head())
```

Each L2 file holds one book, priced in the market's first outcome; the other outcome's book is its complement. The `outcome` parameter is not supported and returns `400`.

### Market lifecycle API

Download one UTC day of lifecycle updates for every market:

`https://api.pmdata.dev/v1/predict_fun/lifecycle/{YYYY}/{MM}/{DD}/markets_lifecycle.parquet`

Response schema: [Predict.fun `lifecycle`](https://pmdata.dev/docs/schemas/predict-fun/lifecycle)

```python

date = "2026/10/01"  # UTC date, YYYY/MM/DD

url = f"https://api.pmdata.dev/v1/predict_fun/lifecycle/{date}/markets_lifecycle.parquet"

df = pd.read_parquet(
    url,
    storage_options={
        "api_key": "<YOUR_API_KEY>",
        "User-Agent": "Mozilla/5.0",
    },
)
print(df.head())
```

## Captured real-time channels

PMData collects these topics from Predict.fun's WebSocket, **`wss://ws.predict.fun/ws`**:

- `predictOrderbook/{marketId}` — Complete aggregated order book for one market, sent on subscription and on every change. Stored in `l2`.
- `predictMarketStatus/{marketId}` — Market status, such as `REGISTERED` or `RESOLVED`. Stored in `lifecycle`.
- `predictTradingStatus/{marketId}` — Trading status, such as `OPEN` or `CLOSED`. Stored in `lifecycle`.
- `predictMarketChanged/{marketId}` — Changes to a market, such as the opening and closing prices of crypto Up/Down markets. Stored in `lifecycle`.

Every market is collected over two independent connections. Each row keeps the source timestamp and PMData's receive timestamp, `local_timestamp`. On-chain fills are read from BNB Smart Chain, not the WebSocket, and stored in `onchain_fills`.

## Market data collection details

PMData's market data collection infrastructure for Predict.fun is located in AWS `ap-northeast-1` (Tokyo), colocated with Predict.fun's exchange.
