Balances and settle
/app shows three numbers on one book. Convert moves a marker onto a rail. Settle spends that rail.
The three numbers
| Balance | What it is | Next step |
|---|---|---|
| Owed | A booked marker, not yet on a rail | Convert 1:1 |
| USDG | Marker sitting on the stablecoin rail | Claim from the vault on Robinhood Chain |
| Compute | Marker sitting on the metered rail | Mint an owed_ key, or use chat |
The rate already ran when the marker was booked. Convert does not take another cut, and the daily room applies to markers that post, not to converting one you already own.
Convert
Enter an amount, choose to USDG or to compute, and the desk opens a review panel before anything is written: amount, source line, destination line, rate, and timing. Minimum move is $1.00.
- Enter an amount, or press Max to move the whole owed line.
- Pick the destination rail.
- Read the review panel. Nothing has been written yet.
- Confirm move writes the ledger and returns a reference.
Success shows the reference and a link straight to settlement. If the write fails, the desk says plainly that no value left your balance and lets you retry with the same idempotency key — so a retry cannot double-post.
Reading the overview
- Floor progress — confirmed trade volume against the $200 floor. Full means the rate is listed for your address.
- Room left today — markers you can still book before 00:00 UTC, out of $5,000.
- Lifetime booked — every marker ever written to this address, settled or not.
- Next claim — the 15-minute vault cooldown, if one is running.
Idempotency
Every convert carries a client-generated key. The desk stores the result against that key, so a duplicate submission returns the original outcome instead of writing a second row. This is why refreshing mid-convert is safe and why the retry button is not dangerous.
POST /api/settle/convert
Idempotency-Key: 4f1c9a2e-7b03-4d16-9e58-0a2c7d13b6f4
{ "amountUsd": 12.53, "rail": "usdg" }
200 { "ref": "cv_9d3a1f", "owed": 4.02, "usdg": 12.53 }
200 (replay) { "ref": "cv_9d3a1f", "replayed": true }