---
title: "Get quotes for several instruments"
method: GET
path: "/quotes"
tags: ["Markets"]
---

# Get quotes for several instruments

`GET /quotes`

## Request

- Base URL: `https://arena-predictions.com/api/v1`
- URL: `https://arena-predictions.com/api/v1/quotes`
- Auth: HTTP bearer

Venue quotes for 1 to 20 instruments. Counts one request per id. Served only while the venue-data switch is on; until then 403 venue_data_off.

## Query parameters

- `ids` string, required

## Response `200`

The quotes; unknown ids in notFound.

- QuotesBatch
  - `quotes` InstrumentQuotes[], required
    - `instrumentId` string, required
    - `label` string, required
    - `oppositeLabel` string, nullable
    - `league` string, nullable
    - `marketType` string, nullable
    - `matchup` string, nullable
    - `gameStatus` string, nullable
    - `queryMeans` string, required
    - `startsAt` string, date-time, required
    - `crossVenue` boolean, required
    - `venues` VenueQuote[], required
      - `venue` 'kalshi' | 'novig' | 'polymarket'
      - `venueMarketId` string
      - `venueSideRef` string
      - `sideLabel` string
      - `yesBidCents` number, nullable
      - `yesAskCents` number, nullable
      - `yesMidCents` number, nullable
      - `lastTradeCents` number, nullable: The last trade of the instrument's YES, in cents. It can be much older than asOf.
      - `lastTradeAt` string, date-time, nullable: When lastTradeCents traded; null when the venue gives no time (Kalshi) or there is none.
      - `outcomeLastTrades` object, nullable: Polymarket only: each outcome's own last trade in its own terms, price and time only. Null elsewhere.
        - `yes` LastPrint, nullable: One outcome's last trade: price in cents and the time it traded. Null until that outcome trades while Arena watches it.
          - `priceCents` number
          - `at` string, date-time, nullable
        - `no` LastPrint, nullable: One outcome's last trade: price in cents and the time it traded. Null until that outcome trades while Arena watches it.
          - `priceCents` number
          - `at` string, date-time, nullable
      - `yesBidContracts` number, nullable
      - `yesAskContracts` number, nullable
      - `complementTradable` boolean
      - `minOrderContracts` number, nullable
      - `asOf` string, date-time
      - `fungibility` 'exact' | 'condition_scope'
      - `note` string, nullable
      - `reviewed` boolean
    - `omitted` object[], required: Venues with a listing that could not be priced this time, and why.
      - `venue` string
      - `note` string
    - `asOf` string, date-time, required
    - `disclaimer` string, required
  - `notFound` string[], required
  - `crossVenue` boolean, required
  - `asOf` string, date-time, required

## Other responses

- `400`: invalid_request: no ids, more than 20, a malformed id, or another parameter.
- `401`: Missing, malformed, unknown, revoked or expired key. Carries a WWW-Authenticate: Bearer challenge.
- `403`: insufficient_scope (no markets:read), or venue_data_off.
- `429`: rate_limited (over the plan's minute limit) or quota_exceeded (over the month). Only while the limits are enforced; until then requests are counted and the headers set, and nothing is refused. error.retryAfterSeconds equals Retry-After.
- `503`: The key could not be verified, or the data could not be read, right now. Retry after the Retry-After seconds.

---

[API](https://skmtc.dev/arena-predictions/apis/arena-api.md) · [All operations](https://skmtc.dev/arena-predictions/apis/arena-api/llms.txt) · [OpenAPI document](https://skmtc.dev/arena-predictions/apis/arena-api/revisions/9d89d166dae6?raw)
