FillProof reconciles what your bot claims against what the chain settled — fills, fees, resolutions, PnL. Every number is an on-chain fact or explicitly marked unknown. Nothing in between.
Read-only. No signing keys, no custody, no order routing. Just truth.
Polymarket's public trades API exposes no fee field — at all. Any tool built on it that shows a fee column is showing a fabricated zero. Your net PnL is overstated by every fee you've ever paid, and nothing on screen tells you.
OrderFilled event's own fee field, on the wallet's rowFillProof computes all three on every fill. If they ever disagree, it flags the fill and keeps the fee unknown — a disagreement means the model of the contract is wrong, and you want to know, not average over it. On every fill audited so far: agreement to the micro-dollar.
A missing measurement is never presented as a measured value. It's enforced in the schema, the engine, and every response: an unknown fee is null, an unmarked position is unknown, and net PnL stays unknown until every component is a fact. We'd rather show you a blank than a number we can't stand behind.
POST what your bot thinks it did. FillProof returns the diff against venue truth — and tells you how each match was made, because match confidence is disclosed, not implied.
| Your claim | Venue record | Drift |
|---|---|---|
| buy 25 @ 0.47 BTC-up-1455 |
buy 25 @ 0.49 slipped 2¢ · cost $0.50 |
price slip |
| sell 40 @ 0.55 ETH-up-1500 |
sell 40 @ 0.55 exact |
ok |
| buy 50 @ 0.31 SOL-up-1505 |
— no venue record |
unfilled |
| buy 100 @ 0.40 XRP-up-1510 |
buy 62 @ 0.40 38 shares short |
partial |
"If you've never reconciled against venue records, you don't know your PnL — you know your bot's opinion of it."
Paste your wallet. Get a drift report on your last 50 fills — real fees, real drift, real net. Free, read-only, no email gate.
We report the gap. We never execute it. No signing keys — ever.