yes pays 100¢ if
the answer turns out to be yes and 0¢ otherwise; a share of no pays 100¢ if it
turns out no. Their prices always sum to 100 — if yes trades at 63¢, no is worth
37¢ by definition, not by coincidence.
Prices are whole cents from 1 to 99. Zero and 100 are settlement values, not
prices: a market at either has no uncertainty left to trade.
One market, two outcomes
This is the fact to internalise before writing any code against this API. A binary market is one market with one ticker and one book.yes and no are
not two markets, and they are not two books. They are two ways of describing the
same position:
So a
buy no order can trade against a buy yes order. They are the two sides of
one trade.
What you paid, and what printed
When abuy no at 40¢ trades against a buy yes at 60¢, one trade happened at one
price — but the two parties paid different numbers. Fills carry both, and picking the
wrong one is the most expensive mistake available on this API:
Reading
trade_price where you meant outcome_price is wrong by 100 − 2p on every
position — at 30¢ that is 40¢ per share — and it is wrong silently, in a direction
that looks plausible. There is no error, just a P&L that drifts.
There are no shorts
You cannot sell what you do not hold. Asell beyond your inventory is
422 insufficient_shares — not a short position, a rejection.
To take the other side of a market, buy the opposite outcome:
- Bearish on
yes?buy no. - Want out of a
yesposition you hold?sell yes, up to the quantity you hold.
Covered pairs
Becauseyes and no pay 100¢ between them in every outcome, holding one of each is
riskless: whichever way the market resolves, the pair pays exactly 100¢.
You can end up holding both sides just by trading — buying yes on one order and
no on another. That part of your book then carries no market risk: it pays 100¢ per
pair at resolution no matter where the market trades in the meantime.
Two consequences when you read your own state back:
- A position is per market and per outcome. Both sides of one market is two
entries in
positions, not one net entry. Code that reads only the first drops a leg of its own hedge. - Netting is yours to do. Nothing on the venue collapses the two into a single number for you.
Time in force
Omitting
time_in_force gives you gtc. That default is deliberate: an order that
silently became ioc would die the moment it failed to cross, which is the opposite
of what someone who omitted the field usually wants.
Fees
Fees are charged on the price you named, not on the canonical price. Abuy no at
35¢ is charged against 35, not against 65.
The curve is parabolic: zero at the extremes, largest at 50¢, and symmetric — 30¢ and
70¢ cost the same. Each market publishes its own maker_fee_rate and taker_fee_rate
as decimal strings ("0.0700" is 7%). See
Matching for the formula.