Skip to main content
A quote is a locked price. Creating a quote moves no money and creates no order; it fixes the rate for a bounded window so the amount your user sees is the amount they get.

Preview vs. locked

Two shapes, two jobs:
  • Previewpulse.rates.preview() returns { rate, youSend, youReceive, expiresAt, quoteId } for display. No order is created.
  • Locked on the order — the order’s quote carries { rate, asset_amount, locked_until }. This is the binding price the deposit is measured against.

The rate is all-in — there are no separate fees

Pulse’s margin is embedded in the rate. There are no separate fees, no line items, and nothing added on top at settlement: youSend and youReceive already reflect the final figures. Quote the rate and that is the price — you never have to reconstruct a total from a base amount plus charges.

Quote lifetime

A locked quote is valid until its expiry — locked_until on an order, expiresAt on a preview. Past that point the quote is stale and must not be reused. Transact only against a live lock; a preview shown in the UI should be refreshed before it lapses.

Re-locking an expired quote

When an order’s quote expires, re-lock it in place with pulse.collectionOrders.refreshQuote(orderId) rather than creating a new order. The order and its deposit context are preserved; only the price is renewed.

Where to go next