Skip to main content
An order (intent) describes what the user wants: input assets, desired outputs, settlement parameters, and deadlines. Once constructed, submit it to the order server for distribution to the solver network.

Order Structure

LI.FI intents use the OIF StandardOrder, which supports single-chain inputs and multi-chain outputs.

Field Reference

Output Fields


Choosing a Resource Lock

Resource locks determine how user funds are held while the solver fills the order. If you’re adding LI.FI Intents alongside other bridges, Simple Escrow is recommended. If you’re building a resource-lock-first application, consider The Compact. See Input Settlement for registration details.

Submitting an Order

For non-gasless escrow integrations, submit orders on-chain (for example through open / openFor flow) and use the order server for quote discovery + status tracking. Use POST /orders/submit only when your integration needs off-chain order submission (for example gasless escrow or signed Compact claims). If you used a quote from the order server, include the quoteId for preferential processing.
The response includes the full order, associated quote (if any), and a meta object with orderIdentifier and onChainOrderId for tracking.
This is a reference template. CatalystCompactOrder submissions require a sponsor signature or Compact registration tx hash. Always validate on order-dev.li.fi before mainnet rollout.

On-Chain vs Off-Chain Orders

The order server is a convenience layer, not a requirement for on-chain orders. All on-chain intents can be submitted without it. Some solvers detect on-chain intents independently.

Calls on Delivery

Each MandateOutput supports a call field for calldata executed on the destination chain after token delivery. The recipient receives tokens first, then the output settler calls outputFilled(bytes32 token, uint256 amount, bytes executionData) on the recipient contract. When using calls on delivery:
  • Tokens are delivered before the call executes for each individual output
  • If the call fails, the entire intent cannot be filled
  • The recipient must be a contract that implements outputFilled, not an EOA
  • For multi-chain outputs, only the first output should include calldata
For arbitrary contract calls, use a batching contract or Single-Call Architecture (SCA) wrapper since the call is wrapped in outputFilled. Contact LI.FI if you need an SCA implementation.

Intent Validation

Before submitting, validate your order against these rules.

Security

  1. Ensure the oracle network is secure relative to the intent value
  2. All oracles (input and output) should belong to the same network
  3. Multi-output orders can be vulnerable to DoS by filling only the first output. Make the first output the most valuable.
  4. Calls from the output settler cannot be trusted for authentication since anyone can fill outputs
  5. Set user as the intended refund recipient, not the intent issuer or relay address.
Ensure that the refund recipient can properly receive and handle funds. Using an address that cannot accept tokens (e.g. a contract without a receive function, or the wrong chain address) will result in permanent loss of funds.

Correctness

  1. Use known, reliable tokens, settlement contracts, and oracles
  2. Use the fewest tokens possible. Low-value or obscure tokens reduce fill likelihood.
  3. Provide sufficient time between fillDeadline and expires to accommodate messaging delays
  4. Ensure the nonce is unique. Escrow requires user uniqueness, while The Compact requires allocator uniqueness.
  5. For The Compact, ensure all inputs share the same allocator and the resource lock expiry is after the intent expiry

Next Steps

Track Order Status

Monitor order progress and handle terminal states

Request a Quote

Fetch solver pricing before constructing an order

Input Settlement

Escrow and Compact registration details

Oracle Systems

Oracle networks and verification