1. Send the CETs to the redemption wallet
Ask for the redemption wallet of the CET withget_redemption_address, naming the symbol and the chain as get_symbols lists them. It is a read, so it is not signed:
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.
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
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.
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.