Search API

Search for events and markets by keyword

Search API

The Search API allows you to find events and their nested markets by searching titles and tickers.

Access

const dflow = new DFlowClient();
const search = dflow.search;

Methods

Search for events matching a query string.

const results = await dflow.search.search({
  query: 'bitcoin',
  limit: 10,
});
 
for (const event of results.events) {
  console.log(`${event.title}`);
}

Parameters:

NameTypeRequiredDescription
querystringYesThe search query string
sortSortFieldNoSort field: 'volume', 'volume_24h', 'liquidity', 'open_interest', 'start_date'
order'asc' | 'desc'NoSort order
limitnumberNoMaximum results to return
cursornumberNoPagination cursor
withNestedMarketsbooleanNoInclude nested markets in response
withMarketAccountsbooleanNoInclude market account information
statusMarketStatusNoFilter by status
entityType'events' | 'markets' | 'series'NoType of entity to search for

Returns: SearchResult

interface SearchResult {
  cursor: number;
  events: Event[];  // Events with nested markets
}

Examples

const results = await dflow.search.search({
  query: 'bitcoin',
});
 
console.log(`Found ${results.events.length} events for "bitcoin":\n`);
 
for (const event of results.events) {
  console.log(`📊 ${event.title}`);
  console.log(`   Ticker: ${event.ticker}`);
  console.log('');
}

Search with Sorting and Pagination

// Search with sorting
const sortedResults = await dflow.search.search({
  query: 'election',
  sort: 'volume',
  order: 'desc',
  limit: 20,
});
 
console.log(`Top ${sortedResults.events.length} election events by volume:`);
for (const event of sortedResults.events) {
  console.log(`  - ${event.title}`);
}
 
// Paginate through results
if (sortedResults.cursor) {
  const nextPage = await dflow.search.search({
    query: 'election',
    cursor: sortedResults.cursor,
  });
}

Search with Nested Markets

const results = await dflow.search.search({
  query: 'NFL',
  withNestedMarkets: true,
  withMarketAccounts: true,
});
 
// Get markets for each matching event
for (const event of results.events) {
  console.log(`\n${event.title}:`);
 
  if (event.markets && event.markets.length > 0) {
    for (const market of event.markets) {
      console.log(`  - ${market.title}`);
      console.log(`    YES Ask: ${market.yesAsk} | NO Ask: ${market.noAsk}`);
    }
  }
}

Build a Search Interface

async function searchMarkets(query: string) {
  if (!query.trim()) {
    return [];
  }
 
  const results = await dflow.search.search({
    query: query.trim(),
    limit: 20,
    withNestedMarkets: true,
  });
 
  return results.events.flatMap(event => {
    if (!event.markets) return [];
 
    return event.markets.map(market => ({
      eventTitle: event.title,
      marketTitle: market.title,
      ticker: market.ticker,
      yesAsk: market.yesAsk,
      noAsk: market.noAsk,
    }));
  });
}
 
// Usage
const markets = await searchMarkets('crypto');
console.log(`Found ${markets.length} markets`);

On this page