The life of a launch
Four statuses, two markets, and one gap between them.
What is live today
TREND runs on its own dev validator. The mainnet programs are not deployed: their ids are reserved and no launch exists there. Statement as of 2026-10-10.
A launch trades in two places over its life. status says which one is open.
status | Market | What you can do |
|---|---|---|
activeBonding | the curve | quote, buy, sell |
graduationPending | closed | wait |
migrating | closed | wait, read migration.opensAt |
graduated | the pools | quote, buy, sell |
Three more values exist and are not part of the normal path: draft (created, not yet open), pausedBonding and
pausedMigration (halted by an operator). Treat any status you do not recognise as "not tradable" and read
GET /v1/launches/{id} again later.
activeBonding -> graduationPending -> migrating -> graduated
the curve market closed market closed the poolsThe gap
Between the last curve trade and the first pool trade there is a period when neither market is open. A quote request
in that period is refused with a 409:
launch is graduationPending, not trading, withretryWhenMigrated: true;launch is migrating, not trading, withretryWhenMigrated: true;- or, once the pools exist but have not started trading, a
409carryingopensAt.
Wait and ask again; do not retry in a tight loop. The realtime stream announces each status change (realtime).
Two markets, two quote shapes
On the curve a quote looks one way, on the pools another. The shape tells you which market priced it, and a client that handles only one will fail on every launch that graduates. See the three quote shapes.
Progress
progressBps is progress toward completing the curve, in basis points of 10000. It reaches 10000 as the curve
completes. It is a display figure: do not derive a price from it.
After completion
migration is null until a launch starts migrating. When present it carries a step, the pools created so far and
opensAt, an ISO timestamp for when the pools open. Nothing swaps on them before that.