Skip to main content
Reference for the main types used with getTradeQuotes, trade, buildTradeTxn, and getAllowance. Import from @dzapio/sdk.

Trade quotes

TradeQuotesRequest

type TradeQuotesRequest = {
  fromChain: number;
  gasless?: boolean;
  data: TradeQuotesRequestData[];
  disableEstimation?: boolean;
  account?: string;
  bridges?: ProtocolFilter;
  dexes?: ProtocolFilter;
  filter?: QuoteFilter;
  timingStrategy?: Partial<{ minWaitTimeMs; maxWaitTimeMs; subsequentDelayMs; preferredResultCount; relaxMinSuccessOnDelay }>;
};

TradeQuotesRequestData

type TradeQuotesRequestData = {
  amount: string;        // wei as string
  srcToken: string;
  srcDecimals?: number;
  destToken: string;
  destDecimals?: number;
  toChain: number;
  slippage: number;
  selectedSource?: string;
};

TradeQuotesResponse

Returned directly by getTradeQuotes() (object keyed by pair key):
type TradeQuotesResponse = {
  [pair: string]: {
    status?: string;
    message?: string;
    recommendedSource: string;
    fastestSource?: string;
    bestReturnSource: string;
    questSource?: string;
    quoteRates?: TradeQuotesByProviderId;
    tokensWithoutPrice: Record<number, string[]>;
  };
};
Use recommendedSource ?? bestReturnSource when building trade data.

Trade build & execute

TradeBuildTxnRequest

type TradeBuildTxnRequest = {
  sender: HexString;
  refundee: HexString;
  fromChain: number;
  gasless: boolean;
  disableEstimation?: boolean;
  data: TradeBuildTxnRequestData[];
  hasPermit2ApprovalForAllTokens?: boolean;
  publicKey?: string;
};

TradeBuildTxnRequestData

type TradeBuildTxnRequestData = {
  amount: string;
  srcToken: string;
  srcDecimals?: number;
  destToken: string;
  destDecimals?: number;
  toChain: number;
  protocol: string;   // from quote recommendedSource or bestReturnSource
  recipient: string;
  slippage: number;
  additionalInfo?: AdditionalInfo;
  permitData?: string;
  permit?: TokenPermitData;
};

TradeBuildTxnResponse (buildTradeTxn / build response)

Returned by buildTradeTxn(request) and when passing txnData to trade(). EVM transaction fields are under transaction:
type TradeBuildTxnResponse = {
  status: "success";
  txId: string;           // Build/transaction ID (hex)
  chainId: number;
  transaction: {
    data: string;         // Encoded calldata (hex)
    to: string;           // Contract address
    from: string;         // Sender address
    value: string;        // Native value in wei
    gasLimit: string;
  };
  gasless: boolean;
  quotes: {
    [pairKey: string]: {
      additionalInfo?: {
        requestId?: string;
        bridgeProvider?: string;
        srcSwapProvider?: string;
      };
      provider?: string;
      destAmount?: string;
      minDestAmount?: string;
    };
  };
  // Optional for non-EVM:
  svmTxData?: { blockhash: string; lastValidBlockHeight: number };
  btcTxData?: { inputs: unknown[]; outputs: unknown[]; feeRate: number };
};

DZapTransactionResponse (trade result)

type DZapTransactionResponse = {
  status: TxnStatus;
  errorMsg?: string;
  code?: StatusCodes | number;
  action?: "TRY_ANOTHER_ROUTE" | "INCREASE_SLIPPAGE" | "INCREASE_ALLOWANCE";
  txnHash?: HexString;
  error?: unknown;
  additionalInfo?: Record<string, unknown>;
  updatedQuotes?: Record<string, unknown>;
};

Allowance

getAllowance() returns { status, code, data }. data is keyed by token address:
// data shape (per token address)
type AllowanceDataEntry = {
  allowance: bigint;
  approvalNeeded: boolean;
  signatureNeeded: boolean;
};

// Example: check if any token needs approval
const data = allowanceCheck.data ?? {};
const needsApproval = tokens.some((t) => data[t.address]?.approvalNeeded);

HexString

Addresses and hashes use the type HexString = `0x${string}`.

Next steps