Build on PredictAsiaX

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.

On this page

1. How to become a builder

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.

1

Pick a track

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.

2

Submit application

Fill the web form or POST directly to /v1/apply. Rate-limited to 5/hour/IP. All fields except track and description are optional.

3a

Auto-provisioning tracks — instant

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.

3b

Reviewed tracks — admin operator

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).

4

Tier upgrade later

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.

What the API actually does on submit. The 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.

2. What you get on approval

Tier-flagged API keys

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.

  • Base URL: api.predictasiax.com/v1
  • Sandbox: same host, sandbox tier (see Sandbox)

Builder Portal

Dashboard at builder.predictasiax.com — first-party email + password login, 12h sessions, revoke everywhere on logout.

  • Apps · API keys · Webhooks
  • Attribution ledger · Revenue · Payouts
  • Subaccounts · Delegation grants

OAuth 2.1 identity provider

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/authorize
  • POST /oauth/token (code + refresh grants)
  • Refresh rotation with family reuse detection

Attribution & Revenue Ledger

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_trades
  • GET /v1/builders/me/revenue — accrual + settled totals
  • GET /v1/builders/me/payouts — payout history
  • GET /v1/audit/proof/{seq} — Merkle proof + verifier JS (/verify)
  • GET /v1/builders/me/tier-progress — 30d volume vs. next threshold
  • X-Builder-Ref header on POST /v1/orders — first-order-time acquisition (see SDK helper below)

Session Keys (scoped delegations)

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 + expiry
  • GET /v1/delegations — what you've issued
  • GET /v1/delegations/received — what you hold
  • DELETE /v1/delegations/{id} — revoke
  • Scopes: trade · close_only · read_positions · withdraw
  • Caps: max_notional_usdt · daily_notional_cap · markets_allowlist · expires_at
  • withdraw requires max_notional_usdt (policy guard)

Points ledger (airdrop-track accrual)

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 rank
  • GET /v1/builders/:userId/points — public read (rank + total only)
  • Formula: points = attributed_volume_usdt × epoch_multiplier
  • Roles: execution builder full multiplier · acquisition builder 0.5×
  • Epoch is derived from your builder tier: genesis / 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 timing

Attribution leaderboard + daily bonus

Public 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-N
  • GET /v1/builders/me/leaderboard-rank?window=1d|7d|30d — my volume + rank
  • Daily bonus pool is self-funded: sized automatically each morning UTC as a fraction of prior-day platform_net residual — no manual pool number to maintain, scales with platform revenue, degrades to $0 when there's no residual.
  • 1d window join: prior UTC day awards from builder_leaderboard_bonus_award with bonus_awarded_usdt per row. Pool total is internal and not published.

Referral SDK helper

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 });
  • Never overwrites existing acquisition attribution (sticky, rug-pull-safe)
  • Server response echoes attribution.ref_applied for confirmation

Webhooks

HMAC-signed event streams — trade.filled, market.resolved, payout.available, payout.paid, auth.token.revoked. Exponential backoff 8-retry policy.

  • CRUD via POST /v1/webhooks
  • Signing secret shown once, rotatable
  • Live delivery log per endpoint

MCP endpoint for AI agents

Your 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).

  • OpenAPI + AsyncAPI + llms.txt for AI discoverability
  • Bearer forwarding to backend

3. What you can build

Each category maps to a set of scopes + endpoints. Request only the scopes you need — least-privilege is enforced.

AI & MCP

Autonomous trading agent

Claude / Cursor / a custom agent uses your builder's MCP endpoint to discover markets, read portfolio, place idempotent orders.

mcp.predictasiax.com/mcp/call
POST /v1/orders (Idempotency-Key required)
scopes: markets:read, orders:create, portfolio:read
Trading UI

Web / mobile trading app

Full-featured trading UI on top of the REST + WS API. End-users authenticate via your OAuth flow or a Portal-issued session.

GET /v1/markets, /v1/markets/movers, /v1/markets/{id}
POST /v1/orders · DELETE /v1/orders/{id}
WS: wss://predictasiax.com/ws (54 event messages)
Widget

Embeddable market widget

Drop <predictasiax-market market-id="…"> into any page. Live prices, one-click trade with the visitor's session. Framework-agnostic web component.

widget.predictasiax.com/embed.js
Attribution: origin header + widget signature
Data

Data terminal / research tool

OHLC candles, order book snapshots, resolution history, oracle feeds. Query historical data for backtesting.

GET /v1/data/history · /v1/data/oracles
scopes: data:history:read, data:history:premium
Liquidity

Market maker bot

Publish resting quotes, respond to RFQs. MM scoring feeds into incentive payouts — top MMs get rebates + priority routing.

POST /v1/mm/quotes · POST /v1/rfq/{id}/quotes
scopes: builder:apps:write (writes are app-signed)
Market creator

Market composer

Submit market proposals — YES/NO binaries, over/unders, multi-outcome. Approved proposals become tradeable markets; you earn creator fees on fills.

POST /v1/composer/proposals
GET /v1/composer/templates (6 kinds seeded)
Oracle

Oracle provider

Post resolution evidence for markets — earn bond returns + reputation score. Challenge-and-defend model with public evidence URLs.

POST /v1/oracle/attest · /v1/oracle/challenge
Bonded — stake required per attestation
Copy trading

Copy-trading / strategy provider

Publish signals — subscribers subscribe with sub-accounts you delegate to. Trade routed through your app_id, you earn perf fee on winners.

POST /v1/subaccounts · POST /v1/subaccounts/{id}/grants
scopes: subaccounts:manage, delegation:trade
Operator

White-label operator

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.

Full endpoint set + operator_id tagging
Signed operator agreement required

4. Builder tiers & benefits

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 baseline1×10× (custom bursts negotiable)up to 20× / fully negotiable per contract
Featured on /builders—✓✓
Grant program eligible✓✓✓
Grant range (PAX)0.5 k – 50 k5 k – 100 k100 k – 500 k
Dedicated channel——✓
Co-marketing——✓
Fee-tier discount——✓
Early access to unreleased APIs—✓✓

5. Grant program (paid in PAX)

Zero fiat. All grants paid in PAX — the platform's native token. Cliff + linear vesting, on-chain-migration-ready. Pull claims — vested tokens sit on the platform until you call claim() to move them into custody. Same semantics as Sablier / OpenZeppelin VestingWallet.

🚀 Hackathon — 500 – 2,000 PAX

Weekend hackathon winners, first integrations, tiny experiments. No cliff · 6 months linear vest · 48 h decision · public GitHub + demo required.

🛠 Builder — 5,000 – 50,000 PAX

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.

🤝 Partner — 100,000 – 500,000 PAX

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.

Claim vested PAX (SDK)

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");

FAQ

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):

Automatic promotion runs to trade_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.

→ Request access Try sandbox first