Skip to main content

Installation

npm install polymarket-us
Requires Node.js 18+. For WebSocket on Node < 22, also install ws. GitHub · npm

Configuration

import { PolymarketUS } from 'polymarket-us';

const client = new PolymarketUS({
  keyId: process.env.POLYMARKET_KEY_ID,
  secretKey: process.env.POLYMARKET_SECRET_KEY,
  timeout: 30000,  // optional, default 30000ms
});
Generate API keys at polymarket.us/developer.

Public Endpoints

No authentication required for market data:
import { PolymarketUS } from 'polymarket-us';

const client = new PolymarketUS();

// Events
const events = await client.events.list({ limit: 10, active: true });
const event = await client.events.retrieveBySlug('super-bowl-2025');

// Markets
const markets = await client.markets.list({ limit: 10 });
const market = await client.markets.retrieveBySlug('btc-100k');
const book = await client.markets.book('btc-100k');
const bbo = await client.markets.bbo('btc-100k');

// Search
const results = await client.search.query({ query: 'bitcoin' });

// Series and Sports
const series = await client.series.list();
const sports = await client.sports.list();

Authenticated Endpoints

Trading requires API credentials:
import { PolymarketUS } from 'polymarket-us';

const client = new PolymarketUS({
  keyId: process.env.POLYMARKET_KEY_ID,
  secretKey: process.env.POLYMARKET_SECRET_KEY,
});

// Account
const balances = await client.account.balances();

// Portfolio
const positions = await client.portfolio.positions();
const activities = await client.portfolio.activities();

// Orders
const openOrders = await client.orders.list();
const order = await client.orders.create({
  marketSlug: 'btc-100k-2025',
  intent: 'ORDER_INTENT_BUY_LONG',
  type: 'ORDER_TYPE_LIMIT',
  price: { value: '0.55', currency: 'USD' },
  quantity: 100,
  tif: 'TIME_IN_FORCE_GOOD_TILL_CANCEL',
});

Error Handling

import {
  PolymarketUS,
  AuthenticationError,
  BadRequestError,
  NotFoundError,
  RateLimitError,
} from 'polymarket-us';

try {
  const order = await client.orders.create({ marketSlug: '...' });
} catch (error) {
  if (error instanceof AuthenticationError) {
    console.error('Invalid credentials');
  } else if (error instanceof BadRequestError) {
    console.error('Invalid parameters:', error.message);
  } else if (error instanceof RateLimitError) {
    console.error('Rate limited');
  } else if (error instanceof NotFoundError) {
    console.error('Not found');
  }
}

Error Types

ExceptionDescription
AuthenticationErrorInvalid or missing credentials
BadRequestErrorInvalid request parameters
NotFoundErrorResource not found
RateLimitErrorRate limit exceeded
APITimeoutErrorRequest timed out
APIConnectionErrorNetwork connection error