Skip to main content
SOAR runs prediction markets on the valuations of private companies — OpenAI, Anthropic, SpaceX and the like. This API is how a program trades them: find markets, read the book, place and cancel orders, and track positions.
The venue trades paper money. Balances and P&L are real in the sense that they are consistently accounted for, and not real in the sense that you can withdraw them. Everything else — the matching, the fees, the settlement — behaves as it would with real money, because it is the same engine.

Start here

Quickstart

A key to your first order in five minutes, in five curl commands.

Authentication

One header, two scopes, and why they do not nest.

Trade from an AI assistant

Connect Claude or ChatGPT to SOAR over MCP. No key to handle.

Errors

The code vocabulary, what to retry, and result_unknown.
Base URL is https://api.trysoar.com/v1. Every request carries exactly one credential: an X-API-KEY header for an integration you write, or an OAuth bearer token for an approved application. Never both.

Three things to know before you write code

The API is ordinary REST; the market structure is not. These three facts cause most first-integration bugs.
Most markets are one rung of a survival ladder — a row of thresholds on the same company’s valuation, each asking “is it worth more than $T?”. The rung prices together describe where the market thinks the valuation lands, so a view about a company is usually a trade on several rungs.Survival ladders →
yes and no are two ways of naming a position in the same book: buy no at 40¢ is the other side of buy yes at 60¢, and the two will trade against each other. Modelling them as separate markets halves the liquidity you can see.Binary markets →
Selling what you do not hold is a rejection, not a short. To take the bearish side you buy the opposite outcome. Positions are non-negative, always.insufficient_shares →

The contract is machine-readable

No key required. That is the OpenAPI 3.1 document for every endpoint here, and it is the same file this site renders — so the docs, the playground, and the API cannot disagree with each other. If you are pointing an agent at this API, point it there.

What you can do

Full endpoint reference, with a playground that sends real requests, is in the API Reference tab.

Conventions

  • Prices are whole cents, 1–99. Amounts are integer cents. Never a float.
  • Rates and valuations are decimal strings — "0.0700" is 7%. A float64 loses precision at these valuations.
  • Ids are strings. order_id exceeds what a JavaScript number holds exactly, so it is quoted; a client that parses it as a number will cancel orders that do not exist.
  • Enums are lower-case strings — yes/no, buy/sell, gtc/ioc/fok.
  • Timestamps are RFC3339, UTC, Z-suffixed.
  • Lists are keyset-paged with limit and an opaque cursor. The cursor is the empty string on the last page — never absent.
  • Errors carry a code. Branch on it; the message is free text. Errors →