Selling as a maker
You publish a sell order: you give sats and receive fiat. The node holds your sats in a Lightning hold invoice until you release them.
How to observe a trade
Two read commands tell you where a trade is:
message list— what the node told you, withnext_stepwhen it asks for something. Poll it; deduplicate byevent_id.order info— the order’s currentstatus, authoritative.
A robust program drives the trade from order info status and uses message list to
pick up invoices to pay (payment_request payloads) and requests (next_step).
Steps
order new --side sell ──► pending ──(buyer takes)──► waiting-payment ──(you pay hold invoice)──►
waiting-buyer-invoice / active ──(buyer: fiat-sent)──► fiat-sent ──(you: release)──► settled-hold-invoice ──► success
-
Create the order.
mostro-cli --output json order new --side sell --currency EUR --fiat-amount 100 \ --payment-method "SEPA" --premium 1 --yesdata.next_stepiswait_for_taker(on a bonded node,pay_bond_invoicefirst: paydata.payment_request). Keepdata.order.id. -
Wait for a taker. Poll
message list --order <id>. When a buyer takes the order the node sends a message withnext_step: pay_hold_invoiceand apayment_requestpayload:{"action": "pay-invoice", "next_step": "pay_hold_invoice", "payload": {"kind": "payment_request", "invoice": "lnbc...", "amount": "100000", "order": {...}}} -
Lock the sats by paying
payload.invoicewith your Lightning wallet. The payment stays pending (held); it is not lost if the trade is canceled. -
Wait for the fiat. The buyer provides an invoice (if needed) and pays you in fiat through the payment method. When they report it, the order status becomes
fiat-sentand you receive afiat-sent-okmessage (payloadpeer). -
Check your bank account.
fiat-sentis the buyer’s claim, not a proof. Only when the money is really there:mostro-cli --output json order release --order <id> --yesdata.resultisreleased. This is irreversible. -
Rate the buyer (human-only today:
mostro-cli rate).
If something goes wrong
| Situation | What to do |
|---|---|
| Nobody takes the order | order cancel --order <id> --yes → canceled |
| The buyer does not pay | Cancel cooperatively or open a dispute (human-only today) |
release returned uncertain | order info --order <id>; see Recovering |
| It was a range order | After release, next_step: sync_child_order: see Range orders |