@predexon/trade-sdk
v0.0.7
Published
Predexon Trade SDK for Polymarket and Kalshi
Maintainers
Readme
Predexon Trade SDK
TypeScript SDK for trading on Polymarket (Polygon) and Kalshi (Solana) prediction markets.
Installation
npm install @predexon/trade-sdkRequires Node.js 20.18+.
Get an API Key
Request access from Predexon to receive an API key.
Important: The SDK is designed for server-side use. Never expose your API key in browser code.
Quick Start: Polymarket with Viem
Works with any viem WalletClient — local accounts, Turnkey, or custom signers. This example shows server-side usage with a local account.
import { PredexonSDK, createViemAdapter } from '@predexon/trade-sdk';
import { createWalletClient, http } from 'viem';
import { polygon } from 'viem/chains';
import { privateKeyToAccount } from 'viem/accounts';
// Create a viem wallet client (this example uses a local account)
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
const walletClient = createWalletClient({
account,
chain: polygon,
transport: http(process.env.POLYGON_RPC_URL),
});
const wallet = createViemAdapter(walletClient);
const sdk = new PredexonSDK({
apiKey: process.env.PREDEXON_API_KEY!,
wallet,
});
// Enable trading (one-time setup)
await sdk.enableTrading({
core: { venue: 'polymarket', wallet: account.address },
approvals: 'sign', // Use 'broadcast' if wallet doesn't support signTransaction
});
// Place a market buy order
const order = await sdk.placeOrder({
core: {
venue: 'polymarket',
wallet: account.address,
side: 'buy',
amount: '10', // $10 USDC
type: 'market',
},
flags: { tokenId: 'your-token-id' },
});
console.log('Order placed:', order);Quick Start: Polymarket with Turnkey
import { PredexonSDK } from '@predexon/trade-sdk';
import { createTurnkeyAdapter } from '@predexon/trade-sdk/server';
const wallet = createTurnkeyAdapter({
apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY!,
apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY!,
organizationId: process.env.TURNKEY_ORGANIZATION_ID!,
signWith: process.env.TURNKEY_SIGN_WITH!, // wallet address or wallet ID
rpcUrl: process.env.POLYGON_RPC_URL,
});
const sdk = new PredexonSDK({
apiKey: process.env.PREDEXON_API_KEY!,
wallet,
});
await sdk.enableTrading({
core: { venue: 'polymarket', wallet: process.env.TURNKEY_SIGN_WITH! },
approvals: 'sign',
});
const order = await sdk.placeOrder({
core: {
venue: 'polymarket',
wallet: process.env.TURNKEY_SIGN_WITH!,
side: 'buy',
amount: '10',
type: 'market',
},
flags: { tokenId: 'your-token-id' },
});Install Turnkey peer dependencies:
npm install @turnkey/api-key-stamper @turnkey/http @turnkey/viemQuick Start: Polymarket with Privy
For apps using Privy embedded wallets. Requires server-side Privy credentials and a P256 authorization key configured in the Privy dashboard.
import { PredexonSDK } from '@predexon/trade-sdk';
import { createPrivyServerAdapter } from '@predexon/trade-sdk/server';
// userWalletAddress is the Privy embedded wallet address for a specific user
const wallet = createPrivyServerAdapter({
appId: process.env.PRIVY_APP_ID!,
appSecret: process.env.PRIVY_APP_SECRET!,
authorizationPrivateKey: process.env.PRIVY_AUTHORIZATION_PRIVATE_KEY!,
walletAddress: userWalletAddress, // user's Privy embedded wallet
});
const sdk = new PredexonSDK({
apiKey: process.env.PREDEXON_API_KEY!,
wallet,
});
await sdk.enableTrading({
core: { venue: 'polymarket', wallet: userWalletAddress },
approvals: 'broadcast', // Privy handles gas internally
});
const order = await sdk.placeOrder({
core: {
venue: 'polymarket',
wallet: userWalletAddress,
side: 'buy',
size: '100',
price: '0.55',
type: 'limit',
},
flags: { tokenId: 'your-token-id' },
});Install Privy peer dependency:
npm install @privy-io/nodeQuick Start: Kalshi
import { PredexonSDK, createSolanaAdapter } from '@predexon/trade-sdk';
import { Keypair, VersionedTransaction } from '@solana/web3.js';
import nacl from 'tweetnacl';
const keypair = Keypair.fromSecretKey(/* your secret key bytes */);
const solanaSigner = createSolanaAdapter({
signSolanaTransaction: async (base64Tx) => {
const tx = VersionedTransaction.deserialize(Buffer.from(base64Tx, 'base64'));
tx.sign([keypair]);
return Buffer.from(tx.serialize()).toString('base64');
},
signSolanaMessage: async (message) => {
const messageBytes = new TextEncoder().encode(message);
const signature = nacl.sign.detached(messageBytes, keypair.secretKey);
return Buffer.from(signature).toString('base64');
},
});
const sdk = new PredexonSDK({
apiKey: process.env.PREDEXON_API_KEY!,
solanaSigner,
});
await sdk.enableTrading({
core: { venue: 'kalshi', wallet: keypair.publicKey.toBase58() },
});
const order = await sdk.placeOrder({
core: {
venue: 'kalshi',
wallet: keypair.publicKey.toBase58(),
side: 'buy',
amount: '10',
type: 'market',
},
flags: { ticker: 'MARKET-TICKER', outcome: 'Yes' },
});Market Identifiers
- Polymarket
tokenId: https://docs.predexon.com/api-reference/markets/list-markets - Kalshi
ticker: https://docs.predexon.com/api-reference/kalshi/list-markets
Documentation
Full API reference, guides, and examples: docs.predexon.com/sdk
Server Adapters
The SDK provides server-side adapters via @predexon/trade-sdk/server:
| Adapter | Use Case | Peer Dependencies |
|---------|----------|-------------------|
| createTurnkeyAdapter | Turnkey-managed wallets | @turnkey/api-key-stamper, @turnkey/http, @turnkey/viem |
| createPrivyServerAdapter | Privy embedded wallets | @privy-io/node |
| createRawKeyAdapter | Dev/test only | None |
Support
Contact Predexon for access and support.
