Index of /v3.1/
Our own capture, v3.1 format. Live data from PendulumFlow.
Format, provenance and known issues for this data: V3.1 · live beta. What we measured about it, and where it falls short: the audit.
Status
Live beta. New hours are published every hour as they are built. The newest published hour is 2026-11-02 10:00 UTC, and the hours since then (2 so far) are still being caught up. This page reads SHA256SUMS.txt each time it is built, so it is never ahead of what you can download.
Coverage
From 2026-10-27 00:00 UTC to 2026-11-02 10:00 UTC: 155 hours. History from before then, the v3 hours rebuilt in the v3.1 layout, is coming.
What's in an hour
Each hour is one folder, v3.1/YYYY-MM-DD/HH/, and each file name starts with the
hour, as in 2026-10-30T08.crypto.parquet. What the published hours hold:
<category>.parquet: the hour's events for one Polymarket category (crypto, sports, politics and so on), sorted by sub-tag, market, token and time. Large categories come in numbered parts.<category>.provenance.parquet: which recorder each row came from and the mirrored twin rows each kept row stands for. Join it on to get back every row v3 had.opening_state.parquet: every token's state at the top of the hour: the book where we have one, best bid and ask, last trade and tick size, so a replay can start at this hour.twin_check.parquet: the check that every dropped twin row rebuilds exactly, so you can confirm it yourself instead of downloading the twins.verify_report.json: the checks the hour passed before it was published.manifest.json: every file in the hour with its row count, size and sha256, and how the hour was built.maps/: the category maps that assign each market its category, and the diffs between successive maps (197 files, listed in SHA256SUMS.txt). The manifest names the map its hour used.
How to download
Download each file once and check it against SHA256SUMS.txt, the list of every
published file and its sha256. A file whose hash does not match is a bad download: fetch it again.
# the ledger, then one hour, then check what you got
curl -sO https://dl.pendulumflow.com/v3.1/SHA256SUMS.txt
grep 2026-11-02/10/ SHA256SUMS.txt | awk '{print $2}' | while read p; do
mkdir -p "$(dirname "$p")" && curl -s -o "$p" https://dl.pendulumflow.com/v3.1/"$p"
done
grep 2026-11-02/10/ SHA256SUMS.txt | sha256sum -c -
Or query a file in place with DuckDB, without downloading it first:
INSTALL httpfs; LOAD httpfs;
SELECT * FROM read_parquet('https://dl.pendulumflow.com/v3.1/2026-11-02/10/2026-11-02T10.ai.parquet') LIMIT 10;
The three hours we shared for testing in October are still there as older preview samples.
The files
v3.1 is in live beta. The format is frozen; if we find a problem, an hour may be re-issued as a new generation. The hour reports are still the v3 design while we build v3.1-specific ones. Coming from v3? Compare the two yourself on the battle test page, and see our step-by-step guide to switching.
Now shipped, in quickstart.py (README):
- a one-line way to read any hour
- a ready-made rebuild of the second token's rows
- a simpler spread
More is coming soon:
- a per-hour market and category index
- hourly crypto settlement data (price to beat, final price, average)
- Chainlink and Binance reference prices
- the signed orders behind each fill, with links to their blockchain transactions
- a public order-latency series
- Polymarket's liquidity-reward parameters, published daily
- each recorder's connection and gap log for every hour
- a correction policy, with a changelog for every change that affects the data
- an opening state with no look-ahead (only what a live observer could have known at the top of the hour)
- the history back to August
Please tell us what you find, and which of these matter to you: Feedback and requests.
Checksums for this prefix:
SHA256SUMS.txt, verify a download with
sha256sum -c. It currently names 5694 hourly Parquet files and 342 sidecars (the manifests and capture-timing files), through
2026-11-02T10.
Download this prefix in bulk
You do not need to open the hour pages, and you should not scrape this one.
SHA256SUMS.txt lists every file under this prefix, so it is both the
download list and the verification file.
# every file URL under /v3.1/
curl -s https://archive.pendulumflow.com/v3.1/SHA256SUMS.txt | awk '{print $2}' \
| sed 's|^|https://dl.pendulumflow.com/v3.1/|'
# fetch them, four at a time, keeping the directory layout
curl -s https://archive.pendulumflow.com/v3.1/SHA256SUMS.txt | awk '{print $2}' \
| xargs -P4 -I{} curl -sf --create-dirs -o {} https://dl.pendulumflow.com/v3.1/{}
# then verify the lot, in the directory you downloaded into
curl -sO https://archive.pendulumflow.com/v3.1/SHA256SUMS.txt && sha256sum -c SHA256SUMS.txt
# fetched only PART of it? filter the ledger to MATCH WHAT YOU TOOK
grep <the prefix you fetched> SHA256SUMS.txt | sha256sum -c -
Fetched only part of it? Filter the checksum list to what you took first, for example
grep 2026-11-02 SHA256SUMS.txt | sha256sum -c - for one day, or every file you
skipped prints as FAILED.
Add | grep 'parquet$' to skip the manifests. Ranges within a file work
too, see the format notes.
155 hours, 6032 objects.
Thin hours inside these windows line up with the venue pausing, though that is not the whole story for every one: the 26 August entry, for one, records a stretch where the venue was emitting and we were not receiving. Polymarket's status page recorded each incident; the link on each line is their record, and details is what we measured and what we are not claiming.
2026-10-29T18:05Zto2026-10-29T19:05Z: Exchange in cancel-only mode for an hour after a third-party provider was compromised. Cancel-only mode with relayer actions paused; the venue said a third-party provider was compromised and trading was halted as a precaution, 18:05 to 19:05 (investigating 18:05:18, identified 18:37:02, monitoring 18:55:16, resolved 19:05:22) UTC (their record). 2 hours · details
1 hour is marked small, meaning under a quarter the size of the median hour here (817.2 MiB). That is a fact about volume, not a verdict about capture. Each marker is a link: where the exchange recorded an incident covering the hour it leads to what we know about it, and where nothing is on record it leads to the definition. Hover for the reason without leaving the page. Some of these hours pass the completeness check for all sixty minutes and simply had little happening; a quiet market and a capture problem look the same from the outside. If the difference matters to your work, read the hour's manifest and the audit rather than inferring from the size.
Looking for data we don't publish yet? Tell us.
Pendulum Flow Discord
Something wrong with an hour, or a file you need that is not here? Say so in the Discord, where the people who run the site and prediction market data geeks compare notes.
Join the Discord