Polymarket data,
from the blockchain.

We index every Polymarket trade directly from Polygon. You get a REST API and WebSocket feed with no rate limits, no dependency on Polymarket's servers.

Polymarket's API wasn't built for you

If you've tried building on Polymarket data, you know the pain. Their API has rate limits between 300 and 1,500 requests per 10 seconds depending on the endpoint. It goes down. It doesn't expose everything.

But every Polymarket trade settles on Polygon. The data is right there, on-chain, public, permanent. You just need someone to read it and serve it properly.

That's what we do. We run Polygon nodes, decode the CTF Exchange contract events, enrich them with market metadata, and give you a fast API on top.

What you get

14 REST endpoints

Markets, trades, OHLCV candles, orderbook snapshots, pricing with 24h change and complement price. Pagination, search, filters. All JSON, all documented.

WebSocket streaming

Subscribe to all trades, trades for a specific token, or market resolutions. Optional zlib compression cuts bandwidth by about 60%. Useful if you're running a bot that needs to react fast.

TypeScript and Rust SDKs

Both handle auth, retries, WebSocket reconnection, and error handling. Or just use curl — every endpoint works with plain HTTP.

Proper security

API keys hashed with SHA-256, three permission scopes, per-key rate limiting, IP blocking, request audit logging. Key rotation and revocation built in. Not an afterthought.

Written in Rust

The whole backend — indexer and API — is Rust. axum for HTTP, alloy for blockchain, tokio for async. Response times are sub-millisecond for most queries.

Try it

Generate a key and start making requests. No signup form, no credit card.

Generate an API key
curl -X POST https://api.gimme.fast/v1/keys \
  -H "Content-Type: application/json" \
  -d '{"name": "my-app"}'
Fetch active markets
curl https://api.gimme.fast/v1/markets?active=true \
  -H "X-API-Key: gf_your_key"
Stream trades (TypeScript)
import { GimmeWebSocket } from "@gimme-fast/sdk";

const ws = new GimmeWebSocket({ apiKey: "gf_..." });
ws.on("trade", (t) => {
  console.log(`${t.side} ${t.size} @ $${t.price}`);
});
ws.connect();

Under the hood

Polygon (Erigon node)
   ↓  WebSocket subscription to new blocks
Rust indexer
   ↓  Decode CTF Exchange events, enrich with metadata
   ├→ TimescaleDB  (historical queries, candles, aggregates)
   └→ Redis        (real-time pub/sub, caching)
         ↓
   Rust API (axum)
   ├→ REST   /v1/markets, /v1/trades, /v1/price, ...
   └→ WebSocket   subscribe to live trades

The indexer watches every Polygon block for events from Polymarket's four contracts: CTF Exchange, Neg Risk CTF Exchange, Neg Risk Adapter, and Conditional Tokens. Trades go into TimescaleDB (hypertables with automatic compression) and get published to Redis for WebSocket consumers. The API serves both.

Get started

The API is free to use. Generate a key, read the docs, build something. If you need higher rate limits or dedicated infrastructure down the road, reach out.

Current limits
read scope
1,000 req/min
write scope
2,000 req/min
admin scope
5,000 req/min