# Dome API — Orthogonal API

> Pay-per-use API on Orthogonal. Each call is billed to your Orthogonal balance.
> Base API: `https://api.orth.sh/v1/run` · [llms.txt](https://orthogonal.com/llms.txt) · [browse all APIs](https://orthogonal.com/discover)

Dome API provides comprehensive access to prediction market data across multiple platforms including Polymarket and Kalshi.

**Verified:** no

## Access

**Run API:** `POST https://api.orth.sh/v1/run`
**Auth:** `Authorization: Bearer $ORTHOGONAL_API_KEY`
Get an API key at https://orthogonal.com/dashboard/settings/api-keys

Every call goes through the unified Run API: send the API `slug`, the endpoint `path`, and the `query`/`body` parameters. The response is `{ "success": true, "price": "<usd>", "data": { ... } }`.

## Endpoints

### Orderbook History

Fetches historical orderbook snapshots for a specific Kalshi market (ticker) over a specified time range. If no start_time and end_time are provided, returns the latest orderbook snapshot for the market. Returns snapshots of the order book including yes/no bids and asks with prices in both cents and dollars. All timestamps are in milliseconds. Orderbook data has history starting from October 29th, 2025. Note: When fetching the latest orderbook (without start/end times), the limit parameter is ignored.

`GET /kalshi/orderbooks`

**Estimated cost:** $0.01

**Docs:** https://docs.domeapi.io/api-reference/endpoint/get-kalshi-orderbook-history

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | The Kalshi market ticker |
| `start_time` | integer | No | Start time in Unix timestamp (milliseconds). Optional - if not provided along with end_time, returns the latest orderbook snapshot. |
| `end_time` | integer | No | End time in Unix timestamp (milliseconds). Optional - if not provided along with start_time, returns the latest orderbook snapshot. |
| `limit` | integer | No | Maximum number of snapshots to return (default: 100, max: 200). Ignored when fetching the latest orderbook without start_time and end_time. |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"dome","path":"/kalshi/orderbooks","method":"GET","query":{"ticker":"<string>","start_time":"<integer>","end_time":"<integer>","limit":"<integer>"}}'
```

### Market Price

Fetches the current market price for a market by token_id. Allows historical lookups via the at_time query parameter.

`GET /polymarket/market-price/{token_id}`

**Estimated cost:** $0.01

**Docs:** https://docs.domeapi.io/api-reference/endpoint/get-market-price

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `token_id` | string | Yes | Path parameter — substitute directly into the endpoint `path`. |
| `at_time` | integer | No | Optional Unix timestamp (in seconds) to fetch a historical market price. If not provided, returns the most real-time price available. |

```bash
# Replace {token_id} in "path" with real values before sending
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"dome","path":"/polymarket/market-price/{token_id}","method":"GET","query":{"at_time":"<integer>"}}'
```

### Market Price

Fetches the current market price for a Kalshi market by market_ticker. Returns prices for both yes and no sides. Allows historical lookups via the at_time query parameter.

`GET /kalshi/market-price/{market_ticker}`

**Estimated cost:** $0.01

**Docs:** https://docs.domeapi.io/api-reference/endpoint/get-kalshi-market-price

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `market_ticker` | string | Yes | Path parameter — substitute directly into the endpoint `path`. |
| `at_time` | integer | No | Optional Unix timestamp (in seconds) to fetch a historical market price. If not provided, returns the most real-time price available. |

```bash
# Replace {market_ticker} in "path" with real values before sending
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"dome","path":"/kalshi/market-price/{market_ticker}","method":"GET","query":{"at_time":"<integer>"}}'
```

### Trade History

Fetches historical trade data for Kalshi markets with optional filtering by ticker and time range. Returns executed trades with pricing, volume, and taker side information. All timestamps are in seconds.

`GET /kalshi/trades`

**Estimated cost:** $0.01

**Docs:** https://docs.domeapi.io/api-reference/endpoint/get-kalshi-trades

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The Kalshi market ticker to filter trades |
| `start_time` | integer | No | Start time in Unix timestamp (seconds) |
| `end_time` | integer | No | End time in Unix timestamp (seconds) |
| `limit` | integer | No | Maximum number of trades to return (default: 100) |
| `offset` | integer | No | Number of trades to skip for pagination |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"dome","path":"/kalshi/trades","method":"GET","query":{"ticker":"<string>","start_time":"<integer>","end_time":"<integer>","limit":"<integer>","offset":"<integer>"}}'
```

### Sport by Date

Find equivalent markets across different prediction market platforms (Polymarket, Kalshi, etc.) for sports events by sport and date.

`GET /matching-markets/sports/{sport}`

**Estimated cost:** $0.01

**Docs:** https://docs.domeapi.io/api-reference/endpoint/get-matching-markets-sports-sport

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `sport` | string | Yes | Path parameter — substitute directly into the endpoint `path`. |
| `date` | string | Yes | The date to find matching markets for in YYYY-MM-DD format |

```bash
# Replace {sport} in "path" with real values before sending
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"dome","path":"/matching-markets/sports/{sport}","method":"GET","query":{"date":"<string>"}}'
```

### Sports

Find equivalent markets across different prediction market platforms (Polymarket, Kalshi, etc.) for sports events using a Polymarket market slug or a Kalshi event ticker.

`GET /matching-markets/sports`

**Estimated cost:** $0.01

**Docs:** https://docs.domeapi.io/api-reference/endpoint/get-matching-markets-sports

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `polymarket_market_slug` | string[] | No | The Polymarket market slug(s) to find matching markets for. To get multiple markets at once, provide the query param multiple times with different slugs. Can not be combined with kalshi_event_ticker. |
| `kalshi_event_ticker` | string[] | No | The Kalshi event ticker(s) to find matching markets for. To get multiple markets at once, provide the query param multiple times with different tickers. Can not be combined with polymarket_market_slug. |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"dome","path":"/matching-markets/sports","method":"GET","query":{"polymarket_market_slug":"<string>","kalshi_event_ticker":"<string>"}}'
```

### Positions

Fetches all Polymarket positions for a proxy wallet address. Returns positions with balance >= 10,000 shares (0.01 normalized) with market info.

`GET /polymarket/positions/wallet/{wallet_address}`

**Estimated cost:** $0.01

**Docs:** https://docs.domeapi.io/api-reference/endpoint/get-positions

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `wallet_address` | string | Yes | Path parameter — substitute directly into the endpoint `path`. |
| `limit` | integer | No | Maximum number of positions to return per page. Defaults to 100, maximum 100. |
| `pagination_key` | string | No | Pagination key returned from previous request to fetch next page of results |

```bash
# Replace {wallet_address} in "path" with real values before sending
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"dome","path":"/polymarket/positions/wallet/{wallet_address}","method":"GET","query":{"limit":"<integer>","pagination_key":"<string>"}}'
```

### Binance Prices

Fetches historical crypto price data from Binance. Returns price data for a specific currency pair over an optional time range. When no time range is provided, returns the most recent price. All timestamps are in Unix milliseconds. Currency format: lowercase alphanumeric with no separators (e.g., btcusdt, ethusdt).

`GET /crypto-prices/binance`

**Estimated cost:** $0.01

**Docs:** https://docs.domeapi.io/api-reference/endpoint/get-binance-crypto-prices

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `currency` | string | Yes | The currency pair symbol. Must be lowercase alphanumeric with no separators (e.g., btcusdt, ethusdt, solusdt, xrpusdt). |
| `start_time` | integer | No | Start time in Unix timestamp (milliseconds). If not provided along with end_time, returns the most recent price (limit 1). |
| `end_time` | integer | No | End time in Unix timestamp (milliseconds). If not provided along with start_time, returns the most recent price (limit 1). |
| `limit` | integer | No | Maximum number of prices to return (default: 100, max: 100). When no time range is provided, limit is automatically set to 1. |
| `pagination_key` | string | No | Pagination key (base64-encoded) to fetch the next page of results. Returned in the response when more data is available. |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"dome","path":"/crypto-prices/binance","method":"GET","query":{"currency":"<string>","start_time":"<integer>","end_time":"<integer>","limit":"<integer>","pagination_key":"<string>"}}'
```

### Activity

Fetches activity data for a specific user with optional filtering by market, condition, and time range. Returns trading activity including MERGES, SPLITS, and REDEEMS.

`GET /polymarket/activity`

**Estimated cost:** $0.01

**Docs:** https://docs.domeapi.io/api-reference/endpoint/get-activity

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `user` | string | Yes | User wallet address to fetch activity for |
| `start_time` | integer | No | Filter activity from this Unix timestamp in seconds (inclusive) |
| `end_time` | integer | No | Filter activity until this Unix timestamp in seconds (inclusive) |
| `market_slug` | string | No | Filter activity by market slug |
| `condition_id` | string | No | Filter activity by condition ID |
| `limit` | integer | No | Number of activities to return (1-1000) |
| `offset` | integer | No | Number of activities to skip for pagination |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"dome","path":"/polymarket/activity","method":"GET","query":{"user":"<string>","start_time":"<integer>","end_time":"<integer>","market_slug":"<string>","condition_id":"<string>","limit":"<integer>","offset":"<integer>"}}'
```

### Markets

Find markets on Polymarket using various filters including the ability to search

`GET /polymarket/markets`

**Estimated cost:** $0.01

**Docs:** https://docs.domeapi.io/api-reference/endpoint/get-markets

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `market_slug` | string[] | No | Filter markets by market slug(s). Can provide multiple values. |
| `event_slug` | string[] | No | Filter markets by event slug(s). Can provide multiple values. |
| `condition_id` | string[] | No | Filter markets by condition ID(s). Can provide multiple values. |
| `tags` | string[] | No | Filter markets by tag(s). Can provide multiple values. |
| `search` | string | No | Search markets by keywords in title and description. Must be URL encoded (e.g., 'bitcoin%20price' for 'bitcoin price'). |
| `status` | enum<string> | No | Filter markets by status (whether they're open or closed) |
| `min_volume` | number | No | Filter markets with total trading volume greater than or equal to this amount (USD) |
| `limit` | integer | No | Number of markets to return (1-100). Default: 10 for search, 10 for regular queries. |
| `offset` | integer | No | Number of markets to skip for pagination |
| `start_time` | integer | No | Filter markets from this Unix timestamp in seconds (inclusive) |
| `end_time` | integer | No | Filter markets until this Unix timestamp in seconds (inclusive) |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"dome","path":"/polymarket/markets","method":"GET","query":{"market_slug":"<string>","event_slug":"<string>","condition_id":"<string>","tags":"<string>","search":"<string>","status":"<string>","min_volume":"<number>","limit":"<integer>","offset":"<integer>","start_time":"<integer>","end_time":"<integer>"}}'
```

### Orderbook History

Fetches historical orderbook snapshots for a specific asset (token ID) over a specified time range. If no start_time and end_time are provided, returns the latest orderbook snapshot for the market. Returns snapshots of the order book including bids, asks, and market metadata in order. All timestamps are in milliseconds. Orderbook data has history starting from October 14th, 2025. Note: When fetching the latest orderbook (without start/end times), the limit and pagination_key parameters are ignored.

`GET /polymarket/orderbooks`

**Estimated cost:** $0.01

**Docs:** https://docs.domeapi.io/api-reference/endpoint/get-orderbook-history

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `token_id` | string | Yes | The token id (asset) for the Polymarket market |
| `start_time` | integer | No | Start time in Unix timestamp (milliseconds). Optional - if not provided along with end_time, returns the latest orderbook snapshot. |
| `end_time` | integer | No | End time in Unix timestamp (milliseconds). Optional - if not provided along with start_time, returns the latest orderbook snapshot. |
| `limit` | integer | No | Maximum number of snapshots to return (default: 100, max: 200). Ignored when fetching the latest orderbook without start_time and end_time. |
| `pagination_key` | string | No | Pagination key to get the next chunk of data. Ignored when fetching the latest orderbook without start_time and end_time. |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"dome","path":"/polymarket/orderbooks","method":"GET","query":{"token_id":"<string>","start_time":"<integer>","end_time":"<integer>","limit":"<integer>","pagination_key":"<string>"}}'
```

### Wallet

Fetches wallet information by providing either an EOA (Externally Owned Account) address or a proxy wallet address. Returns the associated EOA, proxy, and wallet type. Optionally returns trading metrics including total volume, number of trades, and unique markets traded when with_metrics=true.

`GET /polymarket/wallet`

**Estimated cost:** $0.01

**Docs:** https://docs.domeapi.io/api-reference/endpoint/get-wallet

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `eoa` | string | No | EOA (Externally Owned Account) wallet address. Either eoa or proxy must be provided, but not both. |
| `proxy` | string | No | Proxy wallet address. Either eoa or proxy must be provided, but not both. |
| `with_metrics` | enum<string> | No | Whether to include wallet trading metrics (total volume, trades, and markets). Pass true to include metrics. Metrics are computed only when explicitly requested for performance reasons. |
| `start_time` | integer | No | Optional start date for metrics calculation (Unix timestamp in seconds). Only used when with_metrics=true. |
| `end_time` | integer | No | Optional end date for metrics calculation (Unix timestamp in seconds). Only used when with_metrics=true. |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"dome","path":"/polymarket/wallet","method":"GET","query":{"eoa":"<string>","proxy":"<string>","with_metrics":"<string>","start_time":"<integer>","end_time":"<integer>"}}'
```

### Candlesticks

Fetches historical candlestick data for a market identified by condition_id, over a specified interval.

`GET /polymarket/candlesticks/{condition_id}`

**Estimated cost:** $0.01

**Docs:** https://docs.domeapi.io/api-reference/endpoint/get-candlestick

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `condition_id` | string | Yes | Path parameter — substitute directly into the endpoint `path`. |
| `start_time` | integer | Yes | Unix timestamp (in seconds) for start of time range |
| `end_time` | integer | Yes | Unix timestamp (in seconds) for end of time range |
| `interval` | enum<integer> | No | Interval length: 1 = 1m, 60 = 1h, 1440 = 1d. Defaults to 1m. ⚠️ Note: There are range limits for interval — specifically: 1 (1m): max range 1 week 60 (1h): max range 1 month 1440 (1d): max range 1 year |

```bash
# Replace {condition_id} in "path" with real values before sending
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"dome","path":"/polymarket/candlesticks/{condition_id}","method":"GET","query":{"start_time":"<integer>","end_time":"<integer>","interval":"<integer>"}}'
```

### Chainlink Prices

Fetches historical crypto price data from Chainlink. Returns price data for a specific currency pair over an optional time range. When no time range is provided, returns the most recent price. All timestamps are in Unix milliseconds. Currency format: slash-separated (e.g., btc/usd, eth/usd).

`GET /crypto-prices/chainlink`

**Estimated cost:** $0.01

**Docs:** https://docs.domeapi.io/api-reference/endpoint/get-chainlink-crypto-prices

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `currency` | string | Yes | The currency pair symbol. Must be slash-separated (e.g., btc/usd, eth/usd, sol/usd, xrp/usd). |
| `start_time` | integer | No | Start time in Unix timestamp (milliseconds). If not provided along with end_time, returns the most recent price (limit 1). |
| `end_time` | integer | No | End time in Unix timestamp (milliseconds). If not provided along with start_time, returns the most recent price (limit 1). |
| `limit` | integer | No | Maximum number of prices to return (default: 100, max: 100). When no time range is provided, limit is automatically set to 1. |
| `pagination_key` | string | No | Pagination key (base64-encoded) to fetch the next page of results. Returned in the response when more data is available. |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"dome","path":"/crypto-prices/chainlink","method":"GET","query":{"currency":"<string>","start_time":"<integer>","end_time":"<integer>","limit":"<integer>","pagination_key":"<string>"}}'
```

### Wallet Profit-and-Loss

Fetches the realized profit and loss (PnL) for a specific wallet address over a specified time range and granularity. Note: This will differ to what you see on Polymarket’s dashboard since Polymarket showcases historical unrealized PnL. This API tracks realized gains only - from either confirmed sells or redeems. We do not realize a gain/loss until a finished market is redeemed.

`GET /polymarket/wallet/pnl/{wallet_address}`

**Estimated cost:** $0.01

**Docs:** https://docs.domeapi.io/api-reference/endpoint/get-wallet-pnl

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `wallet_address` | string | Yes | Path parameter — substitute directly into the endpoint `path`. |
| `granularity` | enum<string> | Yes | Example: "day" |
| `start_time` | integer | No | Defaults to first day of first trade if not provided. |
| `end_time` | integer | No | Defaults to the current date if not provided. |

```bash
# Replace {wallet_address} in "path" with real values before sending
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"dome","path":"/polymarket/wallet/pnl/{wallet_address}","method":"GET","query":{"granularity":"<string>","start_time":"<integer>","end_time":"<integer>"}}'
```

### Trade History

Fetches historical trade data with optional filtering by market, condition, token, time range, and user’s wallet address.

`GET /polymarket/orders`

**Estimated cost:** $0.01

**Docs:** https://docs.domeapi.io/api-reference/endpoint/get-trade-history

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `market_slug` | string | No | Filter orders by market slug |
| `condition_id` | string | No | Filter orders by condition ID |
| `token_id` | string | No | Filter orders by token ID |
| `start_time` | integer | No | Filter orders from this Unix timestamp in seconds (inclusive) |
| `end_time` | integer | No | Filter orders until this Unix timestamp in seconds (inclusive) |
| `limit` | integer | No | Number of orders to return (1-1000) |
| `offset` | integer | No | Number of orders to skip for pagination |
| `user` | string | No | Filter orders by user (wallet address) |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"dome","path":"/polymarket/orders","method":"GET","query":{"market_slug":"<string>","condition_id":"<string>","token_id":"<string>","start_time":"<integer>","end_time":"<integer>","limit":"<integer>","offset":"<integer>","user":"<string>"}}'
```

### Markets

Find markets on Kalshi using various filters including market ticker, event ticker, status, and volume

`GET /kalshi/markets`

**Estimated cost:** $0.01

**Docs:** https://docs.domeapi.io/api-reference/endpoint/get-kalshi-markets

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `market_ticker` | string[] | No | Filter markets by market ticker(s). Can provide multiple values. |
| `event_ticker` | string[] | No | Filter markets by event ticker(s). Can provide multiple values. |
| `search` | string | No | Search markets by keywords in title and description. Must be URL encoded (e.g., 'bitcoin%20price' for 'bitcoin price'). |
| `status` | enum<string> | No | Filter markets by status (whether they're open or closed) |
| `min_volume` | number | No | Filter markets with total trading volume greater than or equal to this amount (in dollars) |
| `limit` | integer | No | Number of markets to return (1-100). Default: 10. |
| `offset` | integer | No | Number of markets to skip for pagination |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"dome","path":"/kalshi/markets","method":"GET","query":{"market_ticker":"<string>","event_ticker":"<string>","search":"<string>","status":"<string>","min_volume":"<number>","limit":"<integer>","offset":"<integer>"}}'
```

---

Full details and an interactive quickstart: https://orthogonal.com/discover/dome
