> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pulseshiga.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Rates and quotes

> How a rate is previewed, locked, and re-locked — and why the rate is all-in with no separate fees.

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:

* **Preview** — `pulse.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

* [Amounts and precision](/concepts/amounts) — how amounts are represented
* [Order lifecycle](/concepts/order-lifecycle) — where the quote sits in the flow
* [Preview a rate](/backend/preview-rate) — the backend call and its client proxy
