Skip to main content
BETAThe Prediction Market API is currently in beta and subject to breaking changes as we continue to improve the product. If you have any feedback, please reach out in Discord.
Jupiter Forecast is a native prediction market on Solana. The current markets are 15-minute Bitcoin up/down rounds: buy the side you think BTC will land on, settled from the Chainlink BTC/USD price. Forecast runs on the existing Prediction API under the bisonfi provider, and its outcome tokens can also be traded directly through the Swap API.

Markets

Each Forecast event is one 15-minute BTC round with two binary markets: Each side is a Token-2022 mint (outcomeMint) worth $1 if it wins and $0 if it loses. Rounds are scheduled by the issuer rather than rotating continuously, so poll /events to find live ones. A round accepts orders only between its openTime and closeTime: a closed round returns bisonfi_market_not_tradable, while an open round with no routable liquidity returns no_route.

Two ways to integrate

Both paths trade the same tokens: a Prediction API order executes as an atomic USDC-to-outcome-token swap, which is why the outcomeMint is also tradable through the Swap API. Deposits are USDC only. The Prediction API path enforces a 5 to 250 USDC order size at build time; the direct Swap API path has no such cap.

Prerequisites

Prediction API path

Every order, buy or sell, is built by the API, signed by you, then submitted to /execute with the build’s execution.context. This helper covers the sign-and-execute half:

Discover markets

Filter events by the bisonfi provider, with markets inline:

Buy

Forecast orders settle atomically (executionModel: "atomic_swap"), so there is no keeper order to poll: the position appears in GET /positions as soon as /execute returns. See Create Order for the full build response.

Sell

DELETE returns a sell transaction in the same shape, so it reuses the helper. You can sell only while the round is tradable, down to a minimum of 0.01 tokens (smaller dust returns bisonfi_position_too_small). There is no claim step for Forecast: after a round resolves, winning tokens settle automatically and are redeemed on the issuer side.
Read holdings with GET /positions?ownerPubkey=<wallet> (filter to Forecast by a marketId starting BISON-); see Position Data & History for the fields.
Amount fields (contractsMicro, valueUsd, depositAmount) are strings in base units (1000000 = 1 contract or $1.00) and can exceed JavaScript’s safe-integer range. Parse them with BigInt or a decimal library, never parseFloat or Number.

Swap API path

To manage your own position tracking, trade the outcome token directly as a swap from USDC into market.outcomeMint, using the standard Order & Execute flow. Use a high slippageBps because outcome prices swing sharply near expiry. To exit, swap the outcome token back to USDC.

Reference

Verified on-chain configuration for Forecast (mainnet-beta):

Execute Order

API reference and “try it” panel for /execute.

About Prediction

How events, markets, positions, and settlement work.

Order & Execute

The Swap API flow behind the direct outcome-token path.

Position Data & History

Read holdings, P&L, and trade history.