A canonical API for Asia's prediction markets — trade, resolve, embed, provide liquidity.
Application flow via POST /v1/apply: 18 tracks auto-provision a live sk_live_* key on submit; genesis and institutional route to human review for elevated capabilities.
Submit an application via POST /v1/apply. Provisioning behaviour depends on the track you pick — most tracks return a live sk_live_* API key in the response body immediately. Genesis and institutional tracks route to human review.
18 auto-provisioning tracks (app, agent, data, distribution, market, liquidity, oracle, reviewer, operator, self_serve, 8× rfb-*) vs. 2 reviewed tracks (genesis, institutional). See the application form for the full track catalog.
Fill the web form or POST directly to /v1/apply. Rate-limited to 5/hour/IP. All fields except track and description are optional.
Response returns status: "auto_approved" + a live sk_live_* API key (self_serve tier — $10/order, $100/day caps). Save the key from the response body — it's shown once. Go straight to Getting Started.
Response returns status: "pending_review" + an application_code. An admin operator reviews (fit / jurisdiction / intended scope) and delivers a tier-flagged key out-of-band via the email or contact channel you provided. Poll status via GET /v1/apply/{ba_id} (the URL parameter uses the application_code value).
Auto-provisioned keys start on self_serve. Auto-graduation cron promotes to read_live at $100 30-day attributed volume, then to trade_capped at $1,000. Beyond that (trade_full, genesis, partner) requires admin operator approval.
POST /v1/apply endpoint inserts a row in builder_applications, and — for auto-provisioning tracks — synchronously provisions a builder_registry entry and mints a live sk_live_* API key via the same key store that powers all production keys. The API key returned in the response body is the same shape and same key store that a Portal-minted key would use.
Prefixed sk_live_*, differentiated by the tier
flag on the key — self_serve for sandbox ($10/$100 daily caps,
simulated fills), read_live / trade_capped / trade_full
for production. Wrong-tier operations return actionable TIER_LIMIT_EXCEEDED
— impossible to accidentally over-scope a bot.
api.predictasiax.com/v1Dashboard at builder.predictasiax.com — first-party
email + password login, 12h sessions, revoke everywhere on logout.
Your app becomes an OAuth client. End-users click "Sign in with PredictAsiaX", consent to scopes, your app gets scoped access tokens. PKCE S256 required.
GET /oauth/authorizePOST /oauth/token (code + refresh grants)Every fill routed through your app is signed + written to a Merkle-batched audit chain. Any third party can independently confirm inclusion — no PAX cooperation required.
GET /v1/attribution/fills — recent attributed clob_tradesGET /v1/builders/me/revenue — accrual + settled totalsGET /v1/builders/me/payouts — payout historyGET /v1/audit/proof/{seq} — Merkle proof + verifier JS (/verify)GET /v1/builders/me/tier-progress — 30d volume vs. next thresholdX-Builder-Ref header on POST /v1/orders — first-order-time acquisition (see SDK helper below)Mint short-lived, capped sub-signers for another user or your own agent — never expose the root sk_live_* to a browser tab, a Cursor session, or an LLM agent.
POST /v1/delegations — create with scopes + caps + expiryGET /v1/delegations — what you've issuedGET /v1/delegations/received — what you holdDELETE /v1/delegations/{id} — revoketrade · close_only · read_positions · withdrawmax_notional_usdt · daily_notional_cap · markets_allowlist · expires_atwithdraw requires max_notional_usdt (policy guard)Every attributed CLOB fill mints points to your builder ledger — deterministic per-fill accrual, append-only, verifiable. Idempotency by (source_type, source_ref): same fill never credits twice. Runs automatically every 5 minutes.
GET /v1/builders/me/points — total, breakdown by epoch + source, my rankGET /v1/builders/:userId/points — public read (rank + total only)points = attributed_volume_usdt × epoch_multipliergenesis / partner → 1.5× · everything else → 1.0×. Multiplier follows your tier automatically — when auto-graduation promotes you, points scale up on the next fill.mint_status field: currently accruing; no promise of mint timingPublic ranking of builders by attributed CLOB volume for a rolling window. Distinct from the MM liquidity leaderboard (which ranks makers by rebate).
GET /v1/builders/leaderboard?window=1d|7d|30d[&limit=N] — public top-NGET /v1/builders/me/leaderboard-rank?window=1d|7d|30d — my volume + rankplatform_net residual — no manual pool number to maintain, scales with platform revenue, degrades to $0 when there's no residual.builder_leaderboard_bonus_award with bonus_awarded_usdt per row. Pool total is internal and not published.The @predictasiax/api TypeScript SDK ships an attachRef() helper: it reads a builder ref from ?ref=BLD_..., persists in cookie / localStorage / memory, and injects the X-Builder-Ref header into subsequent order requests — the same header the backend reads for first-order-time acquisition attribution.
import { PaxClient, attachRef } from "@predictasiax/api";
const { headers } = attachRef({ storage: "cookie" });
const pax = new PaxClient({ apiKey: "sk_live_...", defaultHeaders: headers });
attribution.ref_applied for confirmationHMAC-signed event streams — trade.filled,
market.resolved, payout.available,
payout.paid, auth.token.revoked. Exponential
backoff 8-retry policy.
POST /v1/webhooksYour builder identity works via
mcp.predictasiax.com/mcp/call — Claude Desktop / Cursor
users add one line and get 44 tools (market_search / place_order / portfolio_read / order_cancel / builder_apply etc — call tools/list for the full runtime enumeration).
llms.txt for AI discoverabilityEach category maps to a set of scopes + endpoints. Request only the scopes you need — least-privilege is enforced.
Claude / Cursor / a custom agent uses your builder's MCP endpoint to discover markets, read portfolio, place idempotent orders.
Full-featured trading UI on top of the REST + WS API. End-users authenticate via your OAuth flow or a Portal-issued session.
Drop <predictasiax-market market-id="…"> into
any page. Live prices, one-click trade with the visitor's session.
Framework-agnostic web component.
OHLC candles, order book snapshots, resolution history, oracle feeds. Query historical data for backtesting.
Publish resting quotes, respond to RFQs. MM scoring feeds into incentive payouts — top MMs get rebates + priority routing.
Submit market proposals — YES/NO binaries, over/unders, multi-outcome. Approved proposals become tradeable markets; you earn creator fees on fills.
Post resolution evidence for markets — earn bond returns + reputation score. Challenge-and-defend model with public evidence URLs.
Publish signals — subscribers subscribe with sub-accounts you delegate to. Trade routed through your app_id, you earn perf fee on winners.
Wrap the API under your own brand for your end-users. Bring KYC, keep your treasury separate, route to PAX for liquidity. Operator agreement required.
Every approved builder starts at Verified. Genesis and Partner are earned or negotiated.
| Verified (default) |
Genesis (first 20) |
Partner (negotiated) |
|
|---|---|---|---|
| Portal + API keys | ✓ | ✓ | ✓ |
| Full endpoint access | ✓ | ✓ | ✓ |
| MCP endpoint | ✓ | ✓ | ✓ |
| OAuth IdP for your users | ✓ | ✓ | ✓ |
| Rate limit baseline | 1× | 10× (custom bursts negotiable) | up to 20× / fully negotiable per contract |
| Featured on /builders | — | ✓ | ✓ |
| Grant program eligible | ✓ | ✓ | ✓ |
| Grant range (PAX) | 0.5 k – 50 k | 5 k – 100 k | 100 k – 500 k |
| Dedicated channel | — | — | ✓ |
| Co-marketing | — | — | ✓ |
| Fee-tier discount | — | — | ✓ |
| Early access to unreleased APIs | — | ✓ | ✓ |
claim() to move them into custody. Same semantics as Sablier
/ OpenZeppelin VestingWallet.
Weekend hackathon winners, first integrations, tiny experiments. No cliff · 6 months linear vest · 48 h decision · public GitHub + demo required.
Independent devs shipping a real product on PAX. 3-month cliff · 12 months linear vest · weekly cohort · requires live URL > 30 days uptime, ≥ 100 users or $10 k routed volume.
Exchanges routing flow, market makers, mainstream integrations. 6-month cliff · 24 months linear · 4 milestone gates (25 % each) · monthly decision cohort · co-marketing + dedicated channel.
Budget caps enforced in code: 2 M PAX / month · 5 M PAX / quarter · 15 M PAX / year.
Apply beyond cap → GRANT_BUDGET_EXCEEDED immediately.
import { PaxClient } from "@predictasiax/api";
const pax = new PaxClient({ apiKey: process.env.PAX_LIVE_KEY });
// List your grants + live vesting calc
const grants = await pax.grants.list();
for (const g of grants) {
console.log(g.id, g.tier, "claimable:", g.vesting.claimable, "PAX");
}
// Move vested-but-unclaimed into custody
const result = await pax.grants.claim("grant_abc123");
console.log("credited", result.claimed_now, "PAX");
Q: How long does application-to-key take?
A: For the 18 auto-provisioning tracks: seconds. The POST /v1/apply response body contains the live sk_live_* key. For the 2 reviewed tracks (genesis, institutional): depends on admin operator throughput and the elevated capability being requested — no automated SLA. Poll status via GET /v1/apply/{ba_id}.
Q: Can I go straight to production without an application?
A: POST /v1/sandbox-keys gives you an anonymous self_serve-tier key in 30 seconds (no application, no email, no signup — see /sandbox). The self_serve tier is capped at $10/order + $100/day. To get to trade_capped / trade_full / genesis, you go through the application flow.
Q: What tier do auto-provisioning tracks start on?
A: self_serve — the same tier as an anonymous sandbox key. This is intentional: the application flow gives you a persistent, org-tagged key with attribution wired in, but the same conservative caps as sandbox. Higher tiers are reached automatically as your 30-day attributed volume grows (see below).
Q: How does tier auto-graduation work?
A: A background cron scans every 15 minutes and auto-graduates builders based on their 30-day attributed CLOB volume (execution_builder_id on clob_trades). Full ladder (TIER_GRADUATE_MIN_USDT, routes/v1AdminBridge.js):
self_serve → read_live — $100 30d volumeread_live → trade_capped — $1,000 30d volumetrade_capped → trade_full — $50,000 30d volume (admin operator sign-off required, hits 14 bps builder combined share)trade_full → genesis — $50,000+ 30d volume, capped 20 slots, committee review, 16 bps combined + 10× rate + early API accessgenesis → partner — $1,000,000 30d volume, negotiated contract, dedicated infra, up to 20× ratetrade_capped. trade_full, genesis, and partner add a mandatory admin operator sign-off on top of the volume threshold (jurisdiction + intended-scope check). Every auto-graduation writes to the builder_attribution_log audit trail; you can watch your own progress via GET /v1/builders/me/tier-progress. If you provided an email during application, you receive a notification. A 24-hour dedup window prevents the same builder from being graduated multiple times in a day.
Q: How do I independently verify an attributed fill?
A: Every fill routed through your app becomes a hash-chained financial_event row that is periodically Merkle-batched and anchored. To verify: (1) get the audit_seq field from the POST /v1/orders response body (added at the time of the fill), (2) call GET /v1/audit/proof/{seq} which returns { leaf, root, proof: [siblings], anchor } plus a minimal verifier JS snippet, (3) run the snippet locally or in your build to prove leaf → root. No PAX cooperation required — the anchor field points to the batch's off-platform anchor. See /verify for a 4-language interactive verifier + Fee Architecture / financial_event taxonomy for the ledger schema.
Q: What's actually in the "reviewed" track review?
A: Admin operator confirms fit / jurisdiction / intended scope for the elevated capability (genesis = 10× rate multiplier + early access to unreleased endpoints; institutional = negotiated fee splits + dedicated infra). If terms need signing (e.g. institutional SLA), the operator handles that out-of-band via the contact channel or email you provided during application. The code does not itself require any signed document to issue a reviewed-track key.
Q: I'm building for an operator (white-label). What's different?
A: Use the operator or institutional track. operator auto-provisions; use it if you're building ops tooling for an existing PAX-integrated venue. institutional is reviewed if you need a formal operator agreement (custom fee splits, dedicated infra, customer-KYC + treasury-separation terms).
Q: Which contact channel is best for reviewed tracks?
A: Include a Telegram / Signal / Discord / Matrix handle in the description field of your application for fastest response during APAC hours. Email works too — the application accepts both. Signal for anything sensitive.
Q: Grants — see the grant program above for full mechanics. Jump to Grant Program.