Overview
Order methods handle the lifecycle of cross-chain swaps: creating orders from quotes, submitting them to relayers, and querying their status.
Creating Orders
createOrder
Create an order from a quote without submitting it to the relayer.
Quote object from getQuote(). Must have enableEstimate: true.
Order creation parameters
Maker’s wallet address (must match the address used in the quote)
Hash lock for the atomic swap. Generate using HashLock.forMultipleFills() or HashLock.forSingleFill().
Array of secret hashes. For single fills, use one hash. For multiple fills, provide hashes matching the preset’s secretsCount.
Address that will receive the destination tokens. Defaults to walletAddress.
Preset to use: fast, medium, slow, or custom. Defaults to the quote’s recommendedPreset.
Unique nonce for the order. Required for orders that don’t allow partial or multiple fills. Auto-generated if not provided.
Permit signature for gasless approvals (without the first 20 bytes of token address)
Source identifier for analytics
Use Permit2 for approvals
Custom preset (only when using custom preset type)
Prepared order ready for signing and submission
order
EvmCrossChainOrder | SvmCrossChainOrder
Cross-chain order object (EVM or Solana)
Quote ID from the original quote
Example
import { SDK, HashLock } from '@1inch/cross-chain-sdk'
const sdk = new SDK({ url: 'https://api.1inch.dev/fusion-plus' })
// First, get a quote with estimation enabled
const quote = await sdk.getQuote({
srcChainId: 1,
dstChainId: 137,
srcTokenAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
dstTokenAddress: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174',
amount: '1000000',
walletAddress: '0x...',
enableEstimate: true // Required!
})
// Check if preset allows multiple fills
const preset = quote.getPreset(quote.recommendedPreset)
const secretsCount = preset.secretsCount
// Generate hash lock and secrets
let hashLock, secretHashes
if (preset.allowMultipleFills) {
const { hashLock: hl, secrets } = HashLock.forMultipleFills(secretsCount)
hashLock = hl
secretHashes = secrets.map(s => s.hash)
} else {
const { hashLock: hl, secret } = HashLock.forSingleFill()
hashLock = hl
secretHashes = [secret.hash]
}
// Create the order
const preparedOrder = sdk.createOrder(quote, {
walletAddress: '0x...',
hashLock,
secretHashes,
preset: 'medium' // Optional: override recommended preset
})
console.log('Order hash:', preparedOrder.hash)
console.log('Quote ID:', preparedOrder.quoteId)
Submitting Orders
submitOrder
Submit an EVM order to the relayer. The order will be signed using the SDK’s configured blockchainProvider.
For orders swapping native assets (ETH, MATIC, etc.), use submitNativeOrder instead.
order
EvmCrossChainOrder
required
EVM cross-chain order from createOrder()
Quote ID from the prepared order
Array of secret hashes (must match the order)
Submitted order information
Encoded order extension data
Example
import { SDK } from '@1inch/cross-chain-sdk'
import { Web3Provider } from '@ethersproject/providers'
// Configure SDK with blockchain provider for signing
const provider = new Web3Provider(window.ethereum)
const sdk = new SDK({
url: 'https://api.1inch.dev/fusion-plus',
blockchainProvider: provider // Required for submitOrder
})
// Create order (see createOrder example)
const { order, quoteId } = preparedOrder
// Submit order to relayer
const orderInfo = await sdk.submitOrder(
1, // Ethereum
order,
quoteId,
secretHashes
)
console.log('Order submitted:', orderInfo.orderHash)
console.log('Signature:', orderInfo.signature)
submitNativeOrder
Submit an order that swaps native assets (ETH, MATIC, BNB, etc.).
Native orders must be submitted both to the relayer (via this method) and on-chain using NativeOrdersFactory.create().
order
EvmCrossChainOrder
required
EVM cross-chain order
Submitted order information (same structure as submitOrder)
Example
import { SDK, EvmAddress } from '@1inch/cross-chain-sdk'
const { order, quoteId } = preparedOrder
const makerAddress = EvmAddress.fromString('0x...')
const orderInfo = await sdk.submitNativeOrder(
1, // Ethereum
order,
makerAddress,
quoteId,
secretHashes
)
// Next: Submit on-chain using NativeOrdersFactory
// See NativeOrdersFactory documentation for details
announceOrder
Announce a Solana order to the relayer before creating it on-chain.
Solana orders require announcement because on-chain data doesn’t contain auction details. After announcing, you must create the order on-chain.
order
SvmCrossChainOrder
required
Solana cross-chain order
Quote ID from the prepared order
Order hash for tracking the announced order
Example
import { SDK } from '@1inch/cross-chain-sdk'
const sdk = new SDK({ url: 'https://api.1inch.dev/fusion-plus' })
// Create Solana order
const { order, quoteId } = preparedOrder // order is SvmCrossChainOrder
// Announce to relayer
const orderHash = await sdk.announceOrder(
order,
quoteId,
secretHashes
)
console.log('Announced order:', orderHash)
// Next: Create order on Solana blockchain
// See Solana integration documentation for details
placeOrder
Convenience method that creates and submits an order in one call.
Only works for EVM orders. For Solana orders, use createOrder + announceOrder.
Quote object (must have enableEstimate: true)
Order parameters (same as createOrder)
Submitted order information
Example
import { SDK, HashLock } from '@1inch/cross-chain-sdk'
import { Web3Provider } from '@ethersproject/providers'
const provider = new Web3Provider(window.ethereum)
const sdk = new SDK({
url: 'https://api.1inch.dev/fusion-plus',
blockchainProvider: provider
})
const quote = await sdk.getQuote({ /* ... */, enableEstimate: true })
const { hashLock, secret } = HashLock.forSingleFill()
// Create and submit in one call
const orderInfo = await sdk.placeOrder(quote, {
walletAddress: '0x...',
hashLock,
secretHashes: [secret.hash]
})
console.log('Order placed:', orderInfo.orderHash)
Querying Orders
getActiveOrders
Get a paginated list of active orders across all makers.
params
ActiveOrdersRequestParams
Filter and pagination parameters
Filter by destination chain
Filter by order version (e.g., ['1.1', '1.2'])
Page number (starts at 1)
Number of results per page
Paginated list of active orders
Example
const activeOrders = await sdk.getActiveOrders({
srcChainId: 1, // Ethereum only
page: 1,
limit: 20
})
console.log(`Found ${activeOrders.meta.totalItems} active orders`)
console.log(`Page ${activeOrders.meta.currentPage} of ${activeOrders.meta.totalPages}`)
for (const order of activeOrders.items) {
console.log('Order hash:', order.orderHash)
console.log('Auction starts:', new Date(order.auctionStartDate))
console.log('Remaining amount:', order.remainingMakerAmount)
}
getOrderStatus
Get detailed status information for a specific order.
Detailed order status
Current order status: pending, executed, expired, cancelled, refunding, or refunded
Validation status: valid, not-enough-balance, not-enough-allowance, invalid-signature, etc.
Array of fill informationShow array item properties
Fill status: pending, executed, refunding, or refunded
Amount filled on maker side
Amount filled on taker side
Escrow events for this fill
Approximate destination token amount
Unix timestamp (seconds) when auction starts
Auction duration in seconds
Initial rate bump percentage
Unix timestamp (milliseconds) when order was created
Whether the order can be cancelled
Cancellation transaction hash (if cancelled)
Example
const status = await sdk.getOrderStatus('0xabcdef...')
console.log('Status:', status.status)
console.log('Valid:', status.validation === 'valid')
if (status.status === 'executed') {
console.log('Order executed successfully!')
console.log('Fills:', status.fills.length)
for (const fill of status.fills) {
console.log('Fill tx:', fill.txHash)
console.log('Amount filled:', fill.filledMakerAmount)
}
} else if (status.status === 'pending') {
const auctionStart = new Date(status.auctionStartDate * 1000)
console.log('Auction starts at:', auctionStart)
console.log('Duration:', status.auctionDuration, 'seconds')
}
getOrdersByMaker
Get orders created by a specific maker address.
params
OrdersByMakerParams
required
Query parameters
Filter by destination chain
Filter by source token address
Filter by destination token address
Filter by orders involving this token (either source or destination)
Filter orders created after this Unix timestamp (seconds)
Filter orders created before this Unix timestamp (seconds)
Paginated list of orders with fill information
Example
const orders = await sdk.getOrdersByMaker({
address: '0x1234567890123456789012345678901234567890',
srcChain: 1, // Ethereum
page: 1,
limit: 20
})
console.log(`User has ${orders.meta.totalItems} orders`)
for (const order of orders.items) {
console.log('Order:', order.orderHash)
console.log('Status:', order.status)
console.log('Created:', new Date(order.createdAt))
console.log('From:', order.srcChainId, 'to:', order.dstChainId)
console.log('Fills:', order.fills.length)
}
Order Status Types
OrderStatus
Possible order states:
pending - Order is active and waiting for resolution
executed - Order has been successfully filled
expired - Order expired without being filled
cancelled - Order was cancelled
refunding - Order is being refunded
refunded - Order has been refunded
ValidationStatus
Order validation states:
valid - Order is valid and can be filled
order-predicate-returned-false - Order predicate check failed
not-enough-balance - Maker doesn’t have enough token balance
not-enough-allowance - Maker hasn’t approved enough tokens
invalid-permit-signature - Permit signature is invalid
invalid-signature - Order signature is invalid
unknown-failure - Unknown validation error
FillStatus
Individual fill states:
pending - Fill is in progress
executed - Fill completed successfully
refunding - Fill is being refunded
refunded - Fill has been refunded