Error Reference

Every custom error code the Fora program can return. When a transaction fails, Solana logs include a line like Program log: AnchorError caused by account: ... or custom program error: 0x1A. The hex code maps to one of the variants below.

The protocol has two error layers:

  • Manifest errors (codes 0–23) — from the underlying CLOB. Returned when low-level order book operations fail.
  • Fora errors (codes 22–50) — Fora-specific. Returned by the prediction market protocol on top of Manifest.

Note the overlap at codes 22 and 23 — the codes come from two different enums in two different programs, so disambiguation depends on which program ID emitted the log line.

Manifest errors (codes 0–23)

From the underlying CLOB. These surface when the low-level order book mechanics fail.

Code Variant Description
0 InvalidMarketParameters Invalid market parameters
1 InvalidDepositAccounts Invalid deposit accounts
2 InvalidWithdrawAccounts Invalid withdraw accounts
3 InvalidCancel Invalid cancel
4 InvalidFreeList Internal free list corruption
5 AlreadyClaimedSeat Cannot claim a second seat for the same trader
6 PostOnlyCrosses Matched on a post-only order
7 AlreadyExpired New order is already expired
8 InsufficientOut Less than minimum out amount (slippage)
9 InvalidPlaceOrderFromWalletParams Invalid place-order-from-wallet params
10 WrongIndexHintParams Index hint did not match actual index
11 PriceNotPositive Price is not positive
12 OrderWouldOverflow Order settlement would overflow
13 OrderTooSmall Order too small to settle any value
14 Overflow Overflow in token addition
15 MissingGlobal Missing Global account
16 GlobalInsufficient Insufficient funds on global account to rest an order
17 IncorrectAccount Account key did not match expected
18 InvalidMint Mint not allowed for market
19 TooManyGlobalSeats Cannot claim a new global seat — use evict
20 InvalidEvict Can only evict the lowest depositor
21 InvalidClean Tried to clean order that was not eligible to be cleaned
22 EvictProtected This seat is protected and cannot be evicted
23 InvalidGlobalCreate Global create / close-orphan-vault validation failed

Fora errors (codes 22–50)

From the Fora prediction market layer on top of Manifest.

Code Variant Description
22 InvalidMetadata Invalid metadata URI or hash
23 InsufficientCollateral Insufficient collateral
24 TokenMintFailed Token mint failed
25 MismatchedTokenAmounts Mismatched token amounts when burning
26 InvalidMarket Invalid market
27 PricesDoNotCross Prices do not cross (yes_price + no_price < 1.00)
28 SupplyInvariantViolated Supply invariant violated (YES_supply != NO_supply)
29 OrderNotFound Order not found
30 NumericOverflow Numeric overflow
31 InvalidDiscriminant Invalid discriminant
32 InvalidAuthority Invalid authority
33 InvalidSigner Invalid signer
34 InvalidTokenAccount Invalid token account
35 InvalidMint Invalid mint (Fora layer — not the same as Manifest's code 18)
36 MarketAlreadyInitialized Market already initialized
37 MarketNotInitialized Market not initialized
38 InvalidManifestProgram Invalid Manifest program
39 InvalidPredictionMarketState Invalid prediction market state
40 MarketClosed Market is closed
41 SlippageExceeded Slippage exceeded
42 MarketNotResolved Market not resolved
43 MarketNotSettled Market not fully settled (traders still have balances)
44 MarketNotDetermined Market is not in DETERMINED state
45 MarketNotClosed Market is not in CLOSED state
46 InvalidUserCount Invalid user count in batch settle params
47 SeatNotFound Seat not found in market
48 SeatOrderMismatch Seat order mismatch — user does not match expected seat trader
49 UnexpectedClobSeat Unexpected CLOB seat — user has seat but was not processed in earlier phases
50 InvalidOrderType Global orders cannot be placed through prediction market batch update

Quick lookup

Searching for a specific failure mode? A few common ones:

If you see... It usually means
MarketClosed (40) Trying to trade on a market that's already past ACTIVE — see Market Lifecycle
MarketNotDetermined (44) Tried to close/settle before resolve was called
SlippageExceeded (41) Order's min_out not met — increase tolerance or split the trade
AlreadyClaimedSeat (5) Calling claim_seat twice; idempotent at the protocol level but no-op
GlobalInsufficient (16) Cross-market matching couldn't find enough opposite-side global liquidity
PricesDoNotCross (27) Cross-market match attempted but bids don't sum to ≥ $1.00
PostOnlyCrosses (6) Post-only limit order would have taken liquidity — placed during a ACTIVE market with crossing book

Source