How RFQs Arrive
When an institution submits a cross-border payment, Musubi broadcasts an anonymized quote request to all registered market makers. You receive:
That’s it. No sender name, no receiver name, no contract identifiers. The request is indistinguishable from any other request of the same size and currency pair.
Unlike CEX order books where you see the full depth, or DEX pools where pricing is algorithmic, here you price each request individually based on flow characteristics — size, currency pair, market conditions — without knowing the counterparty.
Competitive Dynamics
Multiple market makers see the same request simultaneously. Each can submit a quote. The institution (with their custodian) selects the best one. Selection criteria:- Best rate — highest target amount for the given source amount
- Slippage guard — the institution may have set a maximum source amount the sender will pay. Quotes below this floor are automatically disqualified.
- Validity — the quote must still be valid (
valid_untilnot passed) at selection time
Submitting a Quote
Musubi is receiver-fixed: the order pinstarget_amount, and you bid the source amount you need to deliver it.
Consistency rule:
source_amount must equal fx_rate × target_amount. FXOrder.AcceptQuote enforces this on-ledger to within 1 basis point — |source_amount − target_amount × fx_rate| ≤ target_amount × fx_rate × 0.0001 — so an inconsistent triple aborts the deal at co-sign rather than settling at a rate nobody chose.
Validity window: You control how long your quote is valid via valid_until. Shorter windows reduce your risk exposure; longer windows give the institution more time to select. Typical: 30 seconds.
Rate convention: the API and the console differ
This trips up every new integration, so it is worth stating plainly. On the wire,fx_rate is source currency per unit of target currency. That orientation is fixed by the consistency rule above — it is what makes source_amount = fx_rate × target_amount true. It is not negotiable and it has never changed.
The consequence is that the same field sits on two very different numeric scales depending on the direction of travel:
The market-maker console does not use that scale. Its rate field takes the interbank
USD/JPY price — JPY per USD, around 150, to 3 decimal places — in both directions, matching what every other screen in Musubi displays and what an FX desk actually quotes. The browser converts to source-per-target immediately before submitting:
- JPYSC0 → USDCx — the market scale already is the wire scale, so the value passes through unchanged.
- USDCx → JPYSC0 — the console takes the reciprocal, rounded to the ledger’s 10 decimal places. Typing
149.999submitsfx_rate: "0.0066667111".
Quote Lifecycle
What You Never See
Anonymity is maintained throughout the entire lifecycle — before, during, and after settlement:This level of anonymity is enforced at the settlement network protocol level, not by field masking. Your node physically does not receive this data — it is not transmitted to you.
Multiple Quotes
You can submit multiple quotes for the same request (e.g., to update your pricing as market conditions change). Each quote has its ownquote_id and its own valid_until. All are evaluated independently at selection time.