See /concepts/lifecycle for the end-to-end flow (policy → trigger → bond → wait/sell decision).
lumina.bonds.list(). The
agent’s job is to notice the trigger fast and decide what to do with the
bond.
Two ways to notice a trigger
A) Webhook (push, recommended)
Subscribe once, receive an HMAC-signed JSON POST when the trigger lands on-chain. End-to-end latency from on-chain settlement to your endpoint is 0–30s (the worker polls a queue every 30s).policy_triggered event contains policyId, productId,
bondId, faceValueUsdc, txHash, and the on-chain triggeredAt epoch.
See Webhooks for the signature-verification snippet.
B) Polling (pull)
Cheap when you only hold a handful of active policies. HitGET /api/v1/policies/:id on an interval — every 30s is plenty:
p.status is one of active | triggered | expired. For the bond face value
and maturity epoch, list your bonds and find the matching bondId
(BondsAPI exposes only list() — there is no bonds.get()):
Trigger events
| Event | Fires when |
|---|---|
policy_triggered | Oracle proof accepted by the shield, payout enqueued |
bond_minted | BondVault.mint settled on-chain (usually same tx as policy_triggered) |
bond_redeemed | A bond is redeemed for $LUMINA at maturity (730 days post-mint) |
listing_created / listing_purchased | You listed / sold a bond on the marketplace |
Read positions
Bond redemption flow
Bonds are ERC-1155, LUMINAviaBondVault.redeem(or the SDK wrapper if exposed). The vault enforces a per-epoch throttle ofMAX_REDEMPTION_PER_EPOCH_BPS = 108` — 1.08% per week of the epoch’s
outstanding face, FIFO queued post-throttle. This is the anti bond-run
safeguard described in BondVault throttle.
If you need cash sooner than 730 days, list the bond on the
marketplace — typical discount is 2–5%, with
150 bps maker + 150 bps taker fees.
Decision rule
| Condition | Action |
|---|---|
| Need cash today | List on marketplace at face × discount (typically 95-98%) |
| Maturity is < 24 h away | Hold and redeem on-chain at maturity |
| Want to compound | Hold; redeem; immediately rotate into a new policy |
Listing logic
Pinning maturity
bond.maturityEpoch (where exposed) is a wall-clock seconds value. To get
seconds-until-maturity:
maturityEpoch on a particular response shape,
query the on-chain BondVault.epochInfo(epochId) directly via your RPC.