Skip to main content

Examples

Complete examples you can copy and run. All examples use the Context SDK.

Market scanner

Browse trending markets and display quotes:
import { ContextClient } from "@contextwtf/sdk"

const ctx = new ContextClient()

// Fetch trending markets
const { markets } = await ctx.markets.list({ sortBy: "trending", limit: 10 })

for (const market of markets) {
  const quotes = await ctx.markets.quotes(market.id)

  console.log(`\n${market.question}`)
  console.log(`  Status: ${market.status}`)
  console.log(`  Volume: ${market.volume}`)

  if (quotes.yes.bid && quotes.yes.ask) {
    console.log(`  Yes: ${quotes.yes.bid}¢ / ${quotes.yes.ask}¢`)
    console.log(`  Spread: ${quotes.spread}¢`)
  } else {
    console.log("  No quotes available")
  }
}

Orderbook depth

Display the full orderbook for a market:
import { ContextClient } from "@contextwtf/sdk"

const ctx = new ContextClient()
const book = await ctx.markets.orderbook("0xMarketId...", { depth: 10 })

console.log("ASKS (sell orders):")
for (const ask of book.asks.reverse()) {
  const bar = "█".repeat(Math.min(ask.size, 50))
  console.log(`  ${ask.price.toString().padStart(3)}¢  ${bar} ${ask.size}`)
}

console.log("---")

console.log("BIDS (buy orders):")
for (const bid of book.bids) {
  const bar = "█".repeat(Math.min(bid.size, 50))
  console.log(`  ${bid.price.toString().padStart(3)}¢  ${bar} ${bid.size}`)
}

Place and manage orders

Place, check, and cancel orders. Make sure you’ve set up your wallet first.
import { ContextClient } from "@contextwtf/sdk"

const ctx = new ContextClient({
  apiKey: process.env.CONTEXT_API_KEY!,
  signer: { privateKey: process.env.PRIVATE_KEY! as `0x${string}` },
})

// Find a market
const { markets } = await ctx.markets.list({ sortBy: "trending", limit: 1 })
const marketId = markets[0].id

// Check the book first
const book = await ctx.markets.orderbook(marketId, { depth: 5 })
console.log("Best ask:", book.asks[0]?.price, "¢")

// Place a limit buy order
const { order } = await ctx.orders.create({
  marketId,
  outcome: "yes",
  side: "buy",
  priceCents: 40,
  size: 5,
})
console.log("Order placed:", order.nonce)

// Check your open orders
const { orders } = await ctx.orders.mine(marketId)
console.log(`You have ${orders.length} open order(s)`)

// Cancel the order
const cancelResult = await ctx.orders.cancel(order.nonce)
console.log("Cancelled:", cancelResult.success)

Portfolio tracker

Display all your positions and balances:
import { ContextClient } from "@contextwtf/sdk"

const ctx = new ContextClient({
  apiKey: process.env.CONTEXT_API_KEY!,
  signer: { privateKey: process.env.PRIVATE_KEY! as `0x${string}` },
})

// Portfolio stats
const stats = await ctx.portfolio.stats()
console.log(`Portfolio value: ${stats.currentPortfolioValue}`)
console.log(`Change: ${stats.currentPortfolioPercentChange}%`)

// Balances
const balance = await ctx.portfolio.balance()
console.log(`\nTUSD: ${balance.usdc.balance}`)
console.log(`  Wallet: ${balance.usdc.walletBalance}`)
console.log(`  Settlement: ${balance.usdc.settlementBalance}`)

// Active positions
const { portfolio } = await ctx.portfolio.get(undefined, { kind: "active" })
console.log(`\nActive positions: ${portfolio.length}`)

for (const pos of portfolio) {
  console.log(`  ${pos.outcomeName}${pos.balance} tokens`)
  console.log(`    Investment: ${pos.netInvestment}`)
  console.log(`    Current value: ${pos.currentValue}`)
}

// Check for claimable winnings
const claimable = await ctx.portfolio.claimable()
if (claimable.positions.length > 0) {
  console.log(`\nClaimable: ${claimable.totalClaimable}`)
}

Oracle monitor

Check oracle status and request new quotes:
import { ContextClient } from "@contextwtf/sdk"

const ctx = new ContextClient()

const { markets } = await ctx.markets.list({ status: "active", limit: 5 })

for (const market of markets) {
  const { oracle } = await ctx.markets.oracle(market.id)

  console.log(`\n${market.question}`)
  console.log(`  Confidence: ${oracle?.confidenceLevel ?? "not assessed"}`)
  console.log(`  Last checked: ${oracle?.lastCheckedAt ?? "never"}`)

  if (oracle?.summary.shortSummary) {
    console.log(`  Summary: ${oracle.summary.shortSummary}`)
  }

  // Get probability quotes
  const { quotes } = await ctx.markets.oracleQuotes(market.id)
  if (quotes.length > 0) {
    const latest = quotes[0]
    console.log(`  Latest probability: ${latest.probability}%`)
    console.log(`  Confidence: ${latest.confidence}`)
  }
}

Market maker

Post two-sided quotes on a market:
import { ContextClient } from "@contextwtf/sdk"

const ctx = new ContextClient({
  apiKey: process.env.CONTEXT_API_KEY!,
  signer: { privateKey: process.env.PRIVATE_KEY! as `0x${string}` },
})

const marketId = "0xMarketId..."
const spreadCents = 4   // 4¢ spread
const sizePerSide = 20  // 20 contracts per side

// Get current mid price
const quotes = await ctx.markets.quotes(marketId)
const mid = quotes.yes.bid && quotes.yes.ask
  ? Math.round((quotes.yes.bid + quotes.yes.ask) / 2)
  : 50

const bidPrice = mid - spreadCents / 2
const askPrice = mid + spreadCents / 2

console.log(`Quoting ${bidPrice}¢ / ${askPrice}¢ (${spreadCents}¢ spread)`)

// Cancel existing orders
const { orders: existing } = await ctx.orders.mine(marketId)
if (existing.length > 0) {
  await ctx.orders.bulkCancel(existing.map(o => o.nonce))
  console.log(`Cancelled ${existing.length} old orders`)
}

// Post new two-sided quotes
const results = await ctx.orders.bulkCreate([
  {
    marketId,
    outcome: "yes",
    side: "buy",
    priceCents: bidPrice,
    size: sizePerSide,
  },
  {
    marketId,
    outcome: "yes",
    side: "sell",
    priceCents: askPrice,
    size: sizePerSide,
    inventoryModeConstraint: 2, // mint from deposited TUSD
  },
])

for (const r of results) {
  console.log(`  ${r.order.nonce}: ${r.success ? "placed" : "failed"}`)
}

Running the examples

# Read-only examples (no auth needed)
npx tsx market-scanner.ts

# Trading examples (needs API key + private key)
CONTEXT_API_KEY=your_key PRIVATE_KEY=0xyour_key npx tsx place-orders.ts
The SDK also ships with runnable examples in its GitHub repository.