Skip to main content

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
Quote
required
Quote object from getQuote(). Must have enableEstimate: true.
params
OrderParams
required
Order creation parameters
preparedOrder
PreparedOrder
Prepared order ready for signing and submission

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.
srcChainId
SupportedChain
required
Source chain ID
order
EvmCrossChainOrder
required
EVM cross-chain order from createOrder()
quoteId
string
required
Quote ID from the prepared order
secretHashes
string[]
required
Array of secret hashes (must match the order)
orderInfo
OrderInfo
Submitted order information

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().
srcChainId
SupportedChain
required
Source chain ID
order
EvmCrossChainOrder
required
EVM cross-chain order
maker
EvmAddress
required
Maker’s address
quoteId
string
required
Quote ID
secretHashes
string[]
required
Array of secret hashes
orderInfo
OrderInfo
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
quoteId
string
required
Quote ID from the prepared order
secretHashes
string[]
required
Array of secret hashes
orderHash
string
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
Quote
required
Quote object (must have enableEstimate: true)
params
OrderParams
required
Order parameters (same as createOrder)
orderInfo
OrderInfo
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
response
ActiveOrdersResponse
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.
orderHash
string
required
Order hash to query
status
OrderStatusResponse
Detailed order status

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
response
OrdersByMakerResponse
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

Build docs developers (and LLMs) love