core/v0.4.2·unified prediction market api

One API.
Every prediction
market.

Connect to Polymarket, Kalshi, and Hyperliquid through a single REST API and Rust SDK. Normalized markets, cross-exchange matching, real-time data.

Free tier

Unlimited

Latency

<80ms

Uptime

99.97%

GET /matching-markets
200 OK

event · matched 3/3

Will Bitcoin close above $120k on May 31, 2026?

exchangeyesnovol
Polymarket
0.62800.3720$1.42M
Kalshi
0.63150.3685$842K
Hyperliquidcoming soon
spread · 0.0035streaming
BTC>120K0.6315·NBA·LAL→PHX0.4180·FED·25BP0.2845·NFL·KC→BUF0.5612·BTC·DAILY0.6420·TRUMP·240.5103·ELECTION·NJ0.7290·MLB·NYY→LAD0.4855·BTC>120K0.6315·NBA·LAL→PHX0.4180·FED·25BP0.2845·NFL·KC→BUF0.5612·BTC·DAILY0.6420·TRUMP·240.5103·ELECTION·NJ0.7290·MLB·NYY→LAD0.4855·

Three venues.
One contract.

Polymarket and Kalshi are live today. Hyperliquid's HIP-4 outcome markets are landing — read paths and signing primitives are already shipping behind a flag.

PolymarketEVM · CLOB v2
Live

Markets

12k+

WS streams

live

Trading

ready

KalshiCFTC · USD
Live

Markets

8k+

WS streams

live

Trading

ready

HyperliquidHIP-4 · Outcome
Soon

Markets

HIP-4

WS streams

wired

Trading

Q3 ’26

up next:ManifoldMetaculusPredictItBetfair

The same event, in two places at once.

Find the same sports event on Polymarket and Kalshi. We compute the match score with embeddings and serve the result with a 60-second cache.

POSTrequest
# Match sports markets across exchanges
curl https://api.papi.market/matching-markets/sports \
  -H "X-API-Key: <your-api-key>"
200response
application/json
[
  {
    "title": "Suns vs. Lakers",
    "league": "NBA",
    "polymarket_slug": "nba-phx-lal-2026-04-10",
    "kalshi_ticker": "KXNBAGAME-26APR10PHXLAL-PHX",
    "match_score": 0.9126
  },
  {
    "title": "Lightning vs. Bruins",
    "league": "NHL",
    "polymarket_slug": "nhl-tb-bos-2026-04-11",
    "kalshi_ticker": "KXNHLGAME-26APR11TBBOS-TB",
    "match_score": 0.9285
  }
]
matched 2/2 eventscached · 60s

Why teams use papi.

01

Search every exchange with one query.

Polymarket and Kalshi today, Hyperliquid landing soon. Every market is normalized to the same schema — same field names, same Decimal-typed prices, same outcome shape.

  • GET /markets
  • GET /matching-markets
  • GET /events
02

We hold the credentials, not the keys.

Wallet keys are encrypted with per-user DEKs wrapped by Vault Transit. We derive what we need (CLOB API keys, agent wallets) and never expose secret material to the wire.

  • AES-256-GCM
  • Vault Transit
  • Argon2id
03

Streams that actually stream.

WebSocket fan-out hub with Redis pub/sub for cross-pod broadcast. Subscribe once, get every orderbook tick, last trade, and ticker update from every venue.

  • wss://api.papi.market
  • Redis pub/sub
  • <80ms p50

Four steps,
first request in five.

From sign-up to a matched cross-exchange query is four CLI lines. No SDK install required for the first call.

  1. 01

    Register

    Create your free account and get on the waitlist.

    $ open dashboard.papi.market/signup
  2. 02

    Get an API Key

    Once approved, generate an API key from the dashboard in seconds.

    papi_sk_live_•••••
  3. 03

    Query Markets

    Search and filter across every exchange with one request.

    GET /markets?status=open
  4. 04

    Match Events

    Compare prices for the same event on Polymarket and Kalshi, side by side.

    GET /matching-markets

Built for developers, typed for sanity.

The Rust SDK ships first because that's what we run in production. Python and TypeScript are on deck. cURL works today for everyone else.

use papi_sdk::{PapiClient, Exchange};

#[tokio::main]
async fn main() {
    let client = PapiClient::builder()
        .api_key("papi_sk_your_key")
        .build();

    // Markets across every venue, one shape
    let markets = client
        .markets(Exchange::Polymarket)
        .status("open")
        .limit(10)
        .fetch().await?;

    // Stream realtime ticks across exchanges
    let mut stream = client
        .stream()
        .orderbooks(&[markets[0].id.clone()])
        .subscribe().await?;
}
cargo add papi-sdkv0.4.2 · live

One client.
Every venue.

Strict normalization keeps the unified types lean — every field is populated by every exchange with semantically equivalent data. No fabricated zeros, no copied values.

  • Type-safe Decimal pricingrust_decimal
  • Streaming subscriptionstokio · tungstenite
  • Cross-exchange matchingembedding-scored
  • Trading & wallet flowsbehind feature flag
view sdk docs

Watch your traffic, in real time.

Manage keys, monitor rate limits, configure exchange credentials, and watch your spend land — all in the dashboard.

dashboard.papi.market / overview
● connected

API Calls · 24h

12,847

+8.4%

Active Keys

3

Exchanges

2/3

live

p50 latency

62ms

−4ms

api calls · last 18h

▲ 8.4%
00:0006:0012:0018:00

recent · live

  • GET/matching-markets/sports0.04s200
  • GET/polymarket/markets?status=open0.08s200
  • GET/kalshi/markets/KXNFL-260.06s200
  • POST/polymarket/orders0.18s200
  • GET/polymarket/orderbooks?token_id=…0.05s200
tier · free · unlimitedupdated 2s ago

Free is the plan.
It's here to stay.

We're here to ship infrastructure, not lock you behind a paywall. Paid tiers may come later for very high-volume use, but the free tier isn't going anywhere.

always free
$0

/ forever · no card · no limits

For individuals, hackers, and trading desks alike. Same API, same data, same SDK.

what's included

  • Unlimited API calls
  • All supported exchanges
  • Rust SDK access
  • WebSocket streaming
  • Cross-exchange matching
  • Wallet credential storage
Get started →
coming later

Pro

For teams that outgrow the free-tier rate limits. Higher throughput, dedicated infra, white-glove support.

  • Everything in Free
  • Higher rate limits
  • Priority support
Notify me

Things people ask.

05 questions · ask another

  1. 01

    Which prediction markets does PAPI support?

    Polymarket and Kalshi today, with Hyperliquid (HIP-4 outcome markets) landing soon. Read paths and signing primitives are already wired behind a feature flag. All exchanges are accessible through the same unified API and SDK.

  2. 02

    Is PAPI free to use?

    Yes. The free tier is here to stay. It includes unlimited API calls across every supported exchange, the Rust SDK, and real-time WebSocket streaming. Paid tiers may show up later for very high-volume use, but the free tier isn’t going anywhere.

  3. 03

    What SDKs are available?

    Rust today. Python and TypeScript are on deck. You can also use the REST API directly with any language via cURL or your preferred HTTP client.

  4. 04

    What are the rate limits?

    Generous limits designed to stay out of your way for everyday use. Check the docs for current numbers — they apply per API key and reset on a sliding window.

  5. 05

    How are credentials stored?

    Per-user data encryption keys (DEKs) wrapped by Vault Transit, with the underlying KEK held by AWS KMS. Wallet keys never leave our infrastructure unencrypted, and we use them only to derive what we need (CLOB API keys, Hyperliquid agent wallets).

[ ready · v0.4.2 ]

Start trading across every market.

Free forever. Unlimited calls. One key for Polymarket, Kalshi, and everything we ship next.

───built in eu-west-1·open-source friendly·blocks-no-one───