Skip to main content
To sell shares, return the CETs that stand for them. Send the CETs to Securitize’s redemption wallet, then place the sell. A sell the wallet cannot cover is refused before it reaches the broker. As the sell fills, Securitize burns one CET per share sold from the redemption wallet.

1. Send the CETs to the redemption wallet

Ask for the redemption wallet of the CET with get_redemption_address, naming the symbol and the chain as get_symbols lists them. It is a read, so it is not signed:
The ack carries tokenAddress, the CET itself, and redemptionAddress, the wallet to send it to. The address is read when you ask, so ask again before each sell instead of keeping it. Transfer the CETs before you place the sell, one CET for each share you sell, from a wallet registered to your account. The redemption wallet is shared, so Securitize credits each transfer to the account whose wallet sent it, and your sells draw only on what was credited to you. A transfer from any other wallet is not credited to you. Wait for the transfer to be credited before you place the sell. It is credited once it is confirmed on chain and Securitize has recorded it, which takes a short while after you send it. get_redemption_balance says when: its available rises by what you sent.
The ack carries deposited, everything credited to you for that CET; burned, what was burned against your sells; reserved, what your sells hold and has not been burned yet; and available, what a new sell may ask for. A working sell holds its full quantity until it fills or ends, so two sells placed together cannot both draw on the same CETs. To wait for the credit without holding a session open, poll the same read over HTTP, GET /v1/market-maker/redemption-balance?symbol=AAPL&chainId=196: see Reads over HTTP. Securitize checks your balance when the sell arrives, and the wallet as a whole after it. A sell for more than your available answers INVALID_ORDER with your figures, and nothing reaches the broker: transfer the rest, wait for it to be credited, and send the sell again. A sell must be placed by quantity. The wallet is checked in shares, so a sell by notional answers INVALID_ORDER.

2. Place the sell

Otherwise the rules are the buy’s: externalRef as your idempotency key, only the symbols tracked for your account, and an ack that means taken, not filled. See Buy shares and receive CETs for each one, and Track, cancel and reconcile orders to follow the order. If the wallet cannot be checked at that moment, the sell answers UPSTREAM_UNAVAILABLE and nothing reaches the broker. Send it again.

3. Reconcile the burns

Burns follow fills as mints do: each covers the shares sold since the previous burn, amount = executedQty − previousBurnedQty. Sum amount.
From a burn transaction on chain, send its hash as get_burns txHash to get that burn. On Solana the burn’s memo also ends with its traceId, which get_burns takes too. A burn’s txHash is known when it lands, so its first burn_updated carries it. A burn has none when none was reported for it, and burns from before it was recorded have none. Only burns that reached the chain are reported. A burn that failed, or is not resolved yet, is absent, and its CETs are still in the redemption wallet. Read burns here, or on any get_order answer, which carries the order’s burns. Each burn is also pushed as burn_updated, with the same shape, once the CETs are gone. A push is delivered at most once, so get_burns is how you catch up after a gap.