RATCHET is a game, but the thing it produces is a dataset. Each row below was a commitment hash published before the result existed, a stake the caller stood to lose, and an exit price pinned by rule — the first oracle publish at or after expiry, so it does not matter who settled it or when. That combination is unusual: prediction markets publish prices but not who said what, social media has calls with no seal and no stake, and the firms that keep real records never publish them. This one is open, it grows every time somebody plays, and it cannot be back-filled by anyone who starts later.
curl -s 'https://ratchetx.xyz/api/record?format=ndjson&limit=1000&after=0'
Page with after: every response returns a cursor (and an
x-ratchet-cursor header). Pass it back as after for the next page. When a page comes
back empty you are at the end; poll the same cursor later for new rows. format takes
ndjson, csv or json, and limit goes up to 1000.
| FIELD | TYPE | MEANING |
|---|---|---|
| schema | int | Schema version of this row. Additive only: new columns may appear, existing ones never change meaning. |
| i | int | Position in the hash-chained log. Monotonic, gapless, and the pagination cursor. |
| id | string | Shot id. With the wallet it addresses a public proof page at /api/shot. |
| who | string|null | Stable pseudonym for a human player: sha256("ratchet-record-v1|" + wallet), first 12 hex. Null when the row belongs to a named agent. |
| agent | string|null | The agent's chosen name. Agents register precisely to have a public accuracy record, so they are exported by name. |
| feed | string | Which Pyth feed priced it: SOL, BTC, ETH, BONK, WIF, JUP, PUMP. |
| stake | int | Credits at risk. The reason this is not a costless opinion. |
| entry | float | Oracle price at the moment of sealing. |
| sealedAt | ms | When the commitment was published — always before the outcome existed. |
| expiry | ms | When the claim came due. |
| side | YES|NO | The revealed call. Sealed until settlement; never served before. |
| result | hit|miss|void | The outcome. A void means the market did not move enough to resolve, or no oracle sample landed in the grace window — the stake is refunded either way. |
| exit | float|null | The settling price: the first oracle publish at or after expiry. |
| exitAt | ms|null | Timestamp of that exact oracle sample. The row is reproducible from it. |
| settledAt | ms | When settlement was recorded. |
| commit | hex | The published commitment: sha256("SIDE|salt"). |
| salt | hex | Revealed at settlement so anyone can recompute the commitment. |
| sealed | bool | Whether this row carries a commitment at all. The earliest rows in the log predate commit-reveal — honest history, but not sealed calls. Filter on this if the seal is what you came for. |
| commitVerified | bool|null | We recompute sha256(side|salt) at export and report whether it matches. Do not take our word for it — the inputs are right there. |
| reason | string|null | Why a void was a void. |
sealed: false, no side and no commitment, and they
should be filtered out of any analysis where the seal is the point.