Skip to main content
Every StructClient instance exposes 11 namespaces, each a thin wrapper around a group of REST endpoints. Methods share the same shape:
await client.{namespace}.{method}(params?): Promise<HttpResponse<T>>
  • params is a typed object matching the endpoint’s query and path params.
  • The return value is wrapped in an HttpResponse<T> envelope.

Response envelope

interface HttpResponse<T> {
  data: T;
  message: string | null;
  success: boolean;
  info?: {
    version: string;
    time_taken_ms: number;
    credits_consumed: number;
    compute_time_ms: number;
  };
  pagination?: {
    has_more: boolean;
    pagination_key: string | number | null;
  };
}
All parameter and response types are re-exported from the package root. Pull them in with import type { GetMarketsParams, MarketResponse } from "@structbuild/sdk".

Markets

client.markets.getMarkets(params?): HttpResponse<MarketResponse[]>
client.markets.getMarket({ conditionId }): HttpResponse<MarketResponse>
client.markets.getMarketBySlug({ marketSlug }): HttpResponse<MarketResponse>
client.markets.getMarketChart(params): HttpResponse<PositionChartOutcome[]>
client.markets.getMarketMetrics(params): HttpResponse<ConditionMetricsResponse>
client.markets.getMarketVolumeChart(params): HttpResponse<MarketVolumeDataPoint[]>
client.markets.getTrades(params?): HttpResponse<Trade[]>
client.markets.getCandlestick(params): HttpResponse<CandlestickResponse>
client.markets.getPositionCandlestick(params): HttpResponse<CandlestickResponse>
client.markets.getPositionMetrics(params): HttpResponse<PositionMetricsResponse>
client.markets.getPositionVolumeChart(params): HttpResponse<PositionVolumeDataPoint[]>
client.markets.getPriceJumps(params?): HttpResponse<PriceJump[]>
const { data: markets } = await client.markets.getMarkets({ limit: 10, tags: "politics" });

const { data: market } = await client.markets.getMarket({
  conditionId: "0xabc...",
});

const { data: candles } = await client.markets.getCandlestick({
  condition_id: "0xabc...",
  resolution: "1h",
});
Trade responses return a discriminated union. See Trade Types for how to narrow on trade_type.

Events

client.events.getEvents(params?): HttpResponse<Event[]>
client.events.getEvent({ identifier }): HttpResponse<Event>
client.events.getEventBySlug({ slug }): HttpResponse<Event>
client.events.getEventChart(params): HttpResponse<EventMarketChartOutcome[]>
client.events.getEventMetrics(params): HttpResponse<EventMetricsResponse>
client.events.getEventOutcomes(params): HttpResponse<Record<string, string>>
const { data: event } = await client.events.getEventBySlug({ slug: "us-election-2028" });

const { data: metrics } = await client.events.getEventMetrics({
  event_slug: "us-election-2028",
  timeframe: "24h",
});

Trader

client.trader.getTraderTrades(params): HttpResponse<Trade[]>
client.trader.getTraderProfile({ address }): HttpResponse<UserProfile>
client.trader.getTraderProfilesBatch({ addresses }): HttpResponse<UserProfile[]>
client.trader.getTraderVolumeChart(params): HttpResponse<TraderVolumeDataPoint[]>
client.trader.getTraderPnl(params): HttpResponse<TraderPnlSummary>
client.trader.getTraderMarketPnl(params): HttpResponse<TraderMarketPnlEntry[]>
client.trader.getTraderEventPnl(params): HttpResponse<TraderEventPnlEntry[]>
client.trader.getTraderOutcomePnl(params): HttpResponse<TraderOutcomePnlEntry[]>
client.trader.getTraderPnlCandles(params): HttpResponse<PnlCandleEntry[]>
client.trader.getTraderPnlCalendar(params): HttpResponse<PnlCandleEntry[]>
client.trader.getGlobalPnl(params?): HttpResponse<GlobalPnlTrader[]>
client.trader.getLeaderboard(params?): HttpResponse<LeaderboardEntry[]>
const { data: profile } = await client.trader.getTraderProfile({
  address: "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
});

const { data: pnl } = await client.trader.getTraderPnl({
  address: "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
});

const { data: globalPnl } = await client.trader.getGlobalPnl({ limit: 100 });

const { data: leaderboard } = await client.trader.getLeaderboard({
  timeframe: "7d",
  sort_by: "pnl",
  category: "crypto",
  limit: 50,
});

Holders

client.holders.getMarketHolders(params): HttpResponse<MarketHoldersResponse>
client.holders.getPositionHolders({ positionId }): HttpResponse<PositionHoldersResponse>
client.holders.getMarketHoldersHistory(params): HttpResponse<HolderHistoryCandle[]>
client.holders.getPositionHoldersHistory({ positionId }): HttpResponse<HolderHistoryCandle[]>
const { data: holders } = await client.holders.getMarketHolders({
  condition_id: "0xabc...",
});

Order Book

client.orderBook.getOrderBook({ position_id }): HttpResponse<unknown>
client.orderBook.getOrderBookHistory(params?): HttpResponse<unknown>
client.orderBook.getMarketOrderBook(params?): HttpResponse<unknown>
client.orderBook.getSpreadHistory(params?): HttpResponse<unknown>
const { data } = await client.orderBook.getOrderBook({ position_id: "0xabc..." });

Series

client.series.getSeriesList(params?): HttpResponse<Series[]>
client.series.getSeriesOutcomes({ series_slug }): HttpResponse<Record<string, string>>
client.series.getSeriesEvents(params): HttpResponse<Event[]>

Assets

client.assets.getAssetHistory(params): HttpResponse<AssetPriceHistoryRow[]>
const { data } = await client.assets.getAssetHistory({
  asset_symbol: "BTC",
  variant: "1d",
});

Tags

client.tags.getTags(params?): HttpResponse<Tag[]>
client.tags.getTag({ identifier }): HttpResponse<Tag>

Bonds

client.bonds.getBonds(params?): HttpResponse<BondMarket[]>
client.search.search({ q }): HttpResponse<SearchResponse>
const { data: results } = await client.search.search({
  q: "bitcoin",
  limit: 25,
});

Webhooks

client.webhooks.list(params?): HttpResponse<WebhookListResponseBody>
client.webhooks.create(body): HttpResponse<WebhookResponse>
client.webhooks.getWebhook({ webhookId }): HttpResponse<WebhookResponse>
client.webhooks.update(params): HttpResponse<WebhookResponse>
client.webhooks.deleteWebhook({ webhookId }): HttpResponse<DeleteWebhookResponse>
client.webhooks.test({ webhookId }): HttpResponse<WebhookTestResponseBody>
client.webhooks.rotateSecret({ webhookId }): HttpResponse<RotateSecretResponse>
client.webhooks.listEvents(): HttpResponse<ListEventsResponse>
See Managing Webhooks for full examples, filter options, and how to verify delivery signatures.
Last modified on April 14, 2026