Claiming Winnings#
What happens after a market closes, how you collect your winnings, and — most importantly — when you need to do it.
In plain English#
When a market's window ends, three things happen in quick succession:
- The end price is captured from the Pyth oracle. This typically happens within seconds of the market closing.
- The outcome is decided: if the end price is higher than or equal to the start price, YES wins. If lower, NO wins. There's no judgment call — it's a direct number comparison, and a tie counts as UP.
- You claim. Open the Portfolio tab, tap your position, tap Claim. The protocol sends your stablecoin straight to your wallet.
One claim pays out everything at once:
- your winning shares at $1 each, and
- any USDT that was still locked under buy orders that never filled.
If you held the losing side, your shares pay $0 — there are no surprise charges, you just don't collect (though claiming still returns any unfilled buy-order collateral).
⚠️ The deadline: claim within 7 days#
This is the most important rule in this doc.
- Days 0–7 after resolution: your claim window. Only you can settle your position, and claiming returns everything you're owed.
- After day 7: the market becomes eligible for permissionless cleanup and, eventually, teardown. A cleanup crank may settle your abandoned position and pay you — but nobody is obligated to run it. Collateral still locked under never-filled buy orders can be removed without refund during cleanup. When the market is finally torn down, anything left unclaimed in the vault is swept to the market creator — permanently.
The same 7-day clock applies to Expired markets (the 50/50 case below) — expiry stamps the resolution time and starts the same countdown.
The full forfeiture mechanics are in Risks — read that page once; it's the one risk entirely under your control.
What you get paid#
If you held a winning position:
Your payout = (your YES shares if UP, or your NO shares if DOWN) × $1
+ any USDT locked under your unfilled buy orders
If you held both sides:
| What you held | If market goes UP | If market goes DOWN |
|---|---|---|
| 100 YES + 50 NO | $100 | $50 |
| 50 YES + 100 NO | $50 | $100 |
| 100 YES + 100 NO | $100 | $100 |
Holding equal YES and NO guarantees the same payout no matter which way the market goes — useful for locking in a guaranteed return when you bought both sides cheaply.
What about my unfilled buy orders?#
If you placed a limit buy that never (or only partly) filled, the USDT backing the unfilled part stays locked through resolution — it is not automatically refunded when the market ends. It comes back to you when you claim: the redeem flow returns unfilled buy-order collateral together with your share payout, in the same transaction.
(While trading is still open you can always just cancel the order for an instant refund.)
What if the market never resolves? The Expired 50/50 case#
If something goes wrong (an extended oracle outage for that price feed) and no acceptable end price ever arrives, the market can't resolve UP or DOWN. After an extra waiting window set in protocol configuration (the protocol's built-in default is 7 days past the market's end), anyone can flip the market to Expired. The expire step first attempts a late resolution from a valid oracle price — Expired is the last resort.
In an Expired market nobody wins or loses:
- Every share — YES or NO — redeems at $0.50 (a 50/50 split).
- Unfilled buy-order collateral is returned in full when you claim.
- For markets stuck unresolved, there is also a permissionless
per-position escape hatch (
ForceClose) that refunds still-locked order collateral directly to owners.
This is a fallback, not the default. Healthy markets resolve in seconds.
Closing the position to reclaim SOL#
After you've claimed, you can optionally close the on-chain position account to reclaim the small amount of SOL it cost to open (a fraction of a cent to a few cents). The Portfolio tab surfaces this as Close after settlement. Nothing forces you to — but unlike claiming, this is pure housekeeping with no deadline pressure on the SOL itself.
How to claim#
Via web app#
- Open the Portfolio tab.
- Find resolved markets with claimable positions.
- Click Claim and approve the transaction.
- USDT lands in your wallet.
Via CLI#
seesaw position redeem \
--market <MARKET_ADDRESS> \
--amount <BASE_UNITS> \
--token-type yes \
--stablecoin-account <YOUR_USDT_ATA> \
--yes-account <YOUR_YES_ATA> \
--no-account <YOUR_NO_ATA> \
--settlement-mint <USDT_MINT>
Via SDK#
import { buildRedeemIx } from '@seesaw/core';
const ix = buildRedeemIx(
{ amount: 100_000_000n, tokenType: 0 }, // 100 shares (6 decimals), 0 = YES
{
market,
yesMint,
noMint,
userYesAta,
userNoAta,
userStablecoinAta,
vault,
user,
tokenProgram,
settlementMint,
}
);
// sign & send with your preferred @solana/kit transaction flow
See the SDK docs for account derivation helpers.
For the full on-chain mechanics — payout rules, the Redeem instruction,
solvency invariant, MarkPositionSettled, ForceClose, market closure
conditions, and rent recovery — see
Settlement.
Technical reference#
| Action | Instruction |
|---|---|
| Capture end price | SnapshotEnd (0x04) |
| Resolve outcome | ResolveMarket (0x05) |
| Expire (50/50 fallback) | ExpireMarket (0x06) |
| Claim winnings + locked collateral | Redeem (0x1A) |
| Per-position refund, stuck market | ForceClose (0x1B) |
| Post-grace permissionless settle | MarkPositionSettled (0x1C) |
| Close position account (SOL rent) | ClosePosition (0x1D) |
Next Steps#
- Understand Risks — especially the 7-day rule
- See how settlement works under the hood
- Learn Market Making