- Yourself — sign a
redeemPositionscall and relay it (gasless). See the steps below. - Automatically — opt in to auto-redeem once, and winnings are redeemed into your Safe shortly after each market resolves.
redeemable_safe,
not as spendable balance_safe.
Finding what you can redeem
GET /api/v2/atlas/account/wallet/redeemable
Lists every settled market whose payout you have not redeemed yet — one row per
market, with the amount summed across everything you held in it — together with
the wallet config you need to sign the redeem. Only positive amounts are listed:
a market where you hold only losing tokens pays nothing and does not appear.
redeemable matches your redeemable_safe.
Full 1.00 per share — no settlement fee
Redemption, step by step
The operator does not pull funds into your Safe for you — the redemption is authorised by you and relayed on your behalf.1
Market resolves on-chain
The operator reports the outcome. Your winning outcome token becomes
redeemable for 1.00 USDC/share; the losing token is worth 0.
2
Build the redeemPositions call
Encode
redeemPositions(address collateralToken, bytes32 parentCollectionId, bytes32 conditionId, uint256[] indexSets)
with:collateralToken=usdc_addressparentCollectionId=0x0000…0000(32 zero bytes)conditionId=condition_id(from GET /account/wallet/markets/)indexSets=[1, 2]— sweeps both outcome positions in one transaction (the winning side pays out, the losing side is 0)
3
Sign it as a Safe SafeTx
Wrap the calldata in a Safe
SafeTx EIP-712 (the same structure as setup
approvals) with to = conditional_tokens_address, and sign with your EOA.4
Relay it (gasless)
POST it to the relay endpoint. The operator executes
Safe.execTransaction and pays gas.5
USDC lands in your Safe
The redeemed USDC is transferred into your Safe. Once the transaction
confirms, the amount moves from
redeemable_safe to your spendable
balance_safe.6
Withdraw
Move the USDC from your Safe to an external wallet (see below).
Relay the redemption
POST /api/v2/atlas/account/wallet/relay
Submits a signed Safe transaction; the operator executes it and pays gas.
400 safe does not belong to this member unless safe is
your own derived Safe. Response:
Auto-redeem
Turn on auto-redeem and you never have to redeem by hand: after a market resolves, Calibri redeems your winnings into your own Safe and they are credited tobalance_safe like a manual redeem.
How it works
You approve Calibri’s AutoRedeemer contract as an operator for your outcome tokens on the ConditionalTokens contract — onesetApprovalForAll signature,
relayed gaslessly like any Safe transaction. After each market resolves, the
operator calls the AutoRedeemer, which redeems your positions and sends the
whole payout straight back to your Safe in the same transaction.
The AutoRedeemer has no owner and no upgrade path. The only thing it can do with your approval is redeem your resolved positions and return the full payout to the Safe they came from — it cannot send funds anywhere else, touch unresolved markets, or move your USDC. Losing tokens are burned in the same call. Revoke the approval at any time to opt out.
Check whether it is on
GET /api/v2/atlas/account/wallet/auto-redeem
available is false when auto-redeem is not offered on your account (for
example, before your Safe exists). The response also carries the usual wallet
config for signing.
Turn it on or off
1
Relay the approval
Encode
setApprovalForAll(auto_redeemer_address, true) (or false to opt
out), wrap it in a Safe SafeTx with to = conditional_tokens_address,
sign it, and relay it through POST /api/v2/atlas/account/wallet/relay.2
Record your choice
PUT /api/v2/atlas/account/wallet/auto-redeem with { "enabled": true }
(or false). Calibri reads the approval back from the chain before storing
it, and answers 409 if the chain does not show it yet — relay first, then
call this.Withdrawing from the Safe
Because funds live in your own Safe, a withdrawal is a member-controlled on-chain USDC transfer out of the Safe — a SafeSafeTx executing
USDC.transfer(to, amount), relayed gaslessly through the same
POST /api/v2/atlas/account/wallet/relay endpoint used for redemption.
When funds leave the Safe on-chain, Calibri reconciles the off-chain mirror: it
debits balance_safe and cancels any resting orders those funds collateralised.
A withdrawal on Polygon has no fee. To withdraw to an address on Ethereum, Base, Arbitrum
or Optimism instead, see
Withdrawals to other networks.
Withdrawals go through the same relay endpoint as a USDC transfer, as described above.
Void
If the market is voided, the condition resolves on-chain to the payout vector[1,1]: every YES and every NO share redeems for 0.50 USDC, whatever you paid
for it. Redeem exactly as you would a win. The taker fee is refunded to your Safe
mirror. See Voids and postponements.
Related
- The Safe — the relay endpoint and SafeTx structure
- Balances — where redeemed USDC appears (
balance_safe) - Self-custody — the full model end to end
- Withdrawals to other networks — withdrawing to Ethereum, Base, Arbitrum or Optimism