> For the complete documentation index, see [llms.txt](https://docs.yifi.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.yifi.io/api-reference/models.md).

# Models

## The TransactionTokenDto object

```json
{"openapi":"3.0.0","info":{"title":"YiFi Swap Public API","version":"1.0.0"},"components":{"schemas":{"TransactionTokenDto":{"type":"object","properties":{"ticker":{"type":"string","description":"Token ticker"},"network":{"type":"string","description":"Network"},"logoTicker":{"type":"object","description":"Token logo URL"},"logoNetwork":{"type":"object","description":"Network logo URL"},"contractAddress":{"type":"object","description":"Token contract address on the network (null for a native coin)","nullable":true},"chainId":{"type":"object","description":"EVM chainId of the network (null if the network is not EVM or the chainId is unknown)","nullable":true},"decimals":{"type":"object","description":"Number of token decimals","nullable":true}},"required":["ticker","network"]}}}}
```

## The TransactionStatusResponseDto object

```json
{"openapi":"3.0.0","info":{"title":"YiFi Swap Public API","version":"1.0.0"},"components":{"schemas":{"TransactionStatusResponseDto":{"type":"object","properties":{"uuid":{"type":"string","description":"Transaction UUID"},"transactionId":{"type":"string","description":"Provider-side transaction ID"},"status":{"type":"string","description":"Transaction status","enum":["pending","processing","completed","failed","cancelled"]},"statusList":{"type":"object","description":"Detailed status by stage"},"engine":{"type":"string","description":"Engine type"},"provider":{"type":"string","description":"Provider (exchanger) slug"},"logoProvider":{"type":"object","description":"Provider logo URL"},"fromToken":{"description":"Source token","allOf":[{"$ref":"#/components/schemas/TransactionTokenDto"}]},"toToken":{"description":"Target token","allOf":[{"$ref":"#/components/schemas/TransactionTokenDto"}]},"inputAmount":{"type":"string","description":"Deposit amount (the amount sent by the user)"},"receiveAmount":{"type":"string","description":"Receive amount"},"fee":{"type":"string","description":"Fee"},"startTime":{"type":"string","description":"Transaction start time"},"completionTime":{"type":"string","description":"Transaction completion time"},"exchangeRate":{"type":"object","description":"Exchange rate (receiveAmount / inputAmount)","nullable":true},"expirationTime":{"type":"object","description":"Order expiration time (same as on creation; from the provider response via expirationTimePath)","nullable":true},"txCreateMeta":{"type":"object","description":"Transaction creation metadata from the provider"},"transactionTransfer":{"type":"object","description":"Data for the ERC20 transfer (only for cex/private when fromNetwork is EVM and the token has a contractAddress)"}},"required":["uuid","transactionId","status","engine","provider","fromToken","toToken","inputAmount","receiveAmount","fee"]},"TransactionTokenDto":{"type":"object","properties":{"ticker":{"type":"string","description":"Token ticker"},"network":{"type":"string","description":"Network"},"logoTicker":{"type":"object","description":"Token logo URL"},"logoNetwork":{"type":"object","description":"Network logo URL"},"contractAddress":{"type":"object","description":"Token contract address on the network (null for a native coin)","nullable":true},"chainId":{"type":"object","description":"EVM chainId of the network (null if the network is not EVM or the chainId is unknown)","nullable":true},"decimals":{"type":"object","description":"Number of token decimals","nullable":true}},"required":["ticker","network"]}}}}
```

## The RecoverTransactionAccessBodyDto object

```json
{"openapi":"3.0.0","info":{"title":"YiFi Swap Public API","version":"1.0.0"},"components":{"schemas":{"RecoverTransactionAccessBodyDto":{"type":"object","properties":{"id":{"type":"string","description":"Transaction UUID or provider-side transaction_id"},"receive_address":{"type":"string","description":"Receive address (must match the one stored in the transaction)"}},"required":["id","receive_address"]}}}}
```

## The PrivatePairCoinDto object

```json
{"openapi":"3.0.0","info":{"title":"YiFi Swap Public API","version":"1.0.0"},"components":{"schemas":{"PrivatePairCoinDto":{"type":"object","properties":{"ticker":{"type":"string"},"network":{"type":"string"},"logoTicker":{"type":"string","nullable":true},"logoNetwork":{"type":"string","nullable":true}},"required":["ticker","network"]}}}}
```

## The PrivatePairDto object

```json
{"openapi":"3.0.0","info":{"title":"YiFi Swap Public API","version":"1.0.0"},"components":{"schemas":{"PrivatePairDto":{"type":"object","properties":{"from":{"$ref":"#/components/schemas/PrivatePairCoinDto"},"to":{"$ref":"#/components/schemas/PrivatePairCoinDto"}},"required":["from","to"]},"PrivatePairCoinDto":{"type":"object","properties":{"ticker":{"type":"string"},"network":{"type":"string"},"logoTicker":{"type":"string","nullable":true},"logoNetwork":{"type":"string","nullable":true}},"required":["ticker","network"]}}}}
```

## The PrivatePairsResponseDto object

```json
{"openapi":"3.0.0","info":{"title":"YiFi Swap Public API","version":"1.0.0"},"components":{"schemas":{"PrivatePairsResponseDto":{"type":"object","properties":{"pairs":{"type":"array","items":{"$ref":"#/components/schemas/PrivatePairDto"}},"total":{"type":"number","description":"Total number of directions in the selection (popular or other) before pagination"},"limit":{"type":"number"},"offset":{"type":"number"}},"required":["pairs","total","limit","offset"]},"PrivatePairDto":{"type":"object","properties":{"from":{"$ref":"#/components/schemas/PrivatePairCoinDto"},"to":{"$ref":"#/components/schemas/PrivatePairCoinDto"}},"required":["from","to"]},"PrivatePairCoinDto":{"type":"object","properties":{"ticker":{"type":"string"},"network":{"type":"string"},"logoTicker":{"type":"string","nullable":true},"logoNetwork":{"type":"string","nullable":true}},"required":["ticker","network"]}}}}
```

## The TelegramUserSwapHistoryItemDto object

```json
{"openapi":"3.0.0","info":{"title":"YiFi Swap Public API","version":"1.0.0"},"components":{"schemas":{"TelegramUserSwapHistoryItemDto":{"type":"object","properties":{"uuid":{"type":"string"},"transactionId":{"type":"string"},"status":{"type":"string"},"engine":{"type":"string"},"provider":{"type":"string"},"logoProvider":{"type":"object","description":"Provider logo URL","nullable":true},"fromToken":{"description":"Source token (ticker, network, logos, contract, chainId, decimals)","allOf":[{"$ref":"#/components/schemas/TransactionTokenDto"}]},"toToken":{"description":"Target token (ticker, network, logos, contract, chainId, decimals)","allOf":[{"$ref":"#/components/schemas/TransactionTokenDto"}]},"depositAmount":{"type":"string"},"receiveAmount":{"type":"object","nullable":true},"createdAt":{"type":"string"},"accessToken":{"type":"string","description":"Secret for GET /transaction/:id?access_token=…"}},"required":["uuid","transactionId","status","engine","provider","fromToken","toToken","depositAmount","createdAt","accessToken"]},"TransactionTokenDto":{"type":"object","properties":{"ticker":{"type":"string","description":"Token ticker"},"network":{"type":"string","description":"Network"},"logoTicker":{"type":"object","description":"Token logo URL"},"logoNetwork":{"type":"object","description":"Network logo URL"},"contractAddress":{"type":"object","description":"Token contract address on the network (null for a native coin)","nullable":true},"chainId":{"type":"object","description":"EVM chainId of the network (null if the network is not EVM or the chainId is unknown)","nullable":true},"decimals":{"type":"object","description":"Number of token decimals","nullable":true}},"required":["ticker","network"]}}}}
```

## The TelegramUserSwapHistoryResponseDto object

```json
{"openapi":"3.0.0","info":{"title":"YiFi Swap Public API","version":"1.0.0"},"components":{"schemas":{"TelegramUserSwapHistoryResponseDto":{"type":"object","properties":{"items":{"description":"History records (page)","type":"array","items":{"$ref":"#/components/schemas/TelegramUserSwapHistoryItemDto"}},"total":{"type":"number","description":"Total number of the user's records (ignoring limit/offset)"},"limit":{"type":"number","description":"Applied limit"},"offset":{"type":"number","description":"Applied offset"}},"required":["items","total","limit","offset"]},"TelegramUserSwapHistoryItemDto":{"type":"object","properties":{"uuid":{"type":"string"},"transactionId":{"type":"string"},"status":{"type":"string"},"engine":{"type":"string"},"provider":{"type":"string"},"logoProvider":{"type":"object","description":"Provider logo URL","nullable":true},"fromToken":{"description":"Source token (ticker, network, logos, contract, chainId, decimals)","allOf":[{"$ref":"#/components/schemas/TransactionTokenDto"}]},"toToken":{"description":"Target token (ticker, network, logos, contract, chainId, decimals)","allOf":[{"$ref":"#/components/schemas/TransactionTokenDto"}]},"depositAmount":{"type":"string"},"receiveAmount":{"type":"object","nullable":true},"createdAt":{"type":"string"},"accessToken":{"type":"string","description":"Secret for GET /transaction/:id?access_token=…"}},"required":["uuid","transactionId","status","engine","provider","fromToken","toToken","depositAmount","createdAt","accessToken"]},"TransactionTokenDto":{"type":"object","properties":{"ticker":{"type":"string","description":"Token ticker"},"network":{"type":"string","description":"Network"},"logoTicker":{"type":"object","description":"Token logo URL"},"logoNetwork":{"type":"object","description":"Network logo URL"},"contractAddress":{"type":"object","description":"Token contract address on the network (null for a native coin)","nullable":true},"chainId":{"type":"object","description":"EVM chainId of the network (null if the network is not EVM or the chainId is unknown)","nullable":true},"decimals":{"type":"object","description":"Number of token decimals","nullable":true}},"required":["ticker","network"]}}}}
```

## The ProviderLegalDocumentDto object

```json
{"openapi":"3.0.0","info":{"title":"YiFi Swap Public API","version":"1.0.0"},"components":{"schemas":{"ProviderLegalDocumentDto":{"type":"object","properties":{"docName":{"type":"string","description":"Document title"},"docLink":{"type":"string","description":"Link to the official document"}},"required":["docName","docLink"]}}}}
```

## The AggregatorProviderDto object

```json
{"openapi":"3.0.0","info":{"title":"YiFi Swap Public API","version":"1.0.0"},"components":{"schemas":{"AggregatorProviderDto":{"type":"object","properties":{"id":{"type":"string","description":"Provider ID"},"name":{"type":"string","description":"Provider name"},"logoUrl":{"type":"string","description":"Provider logo URL"},"engine":{"type":"string","description":"Engine type","enum":["on-chain","off-chain","private"]},"status":{"type":"string","description":"Provider status","enum":["active","inactive","maintenance"]},"supportedChains":{"description":"Supported chains","type":"array","items":{"type":"string"}},"supportedTokens":{"description":"Supported tokens","type":"array","items":{"type":"string"}},"averageFee":{"type":"string","description":"Average fee"},"estimatedTime":{"type":"string","description":"Estimated time to complete"},"features":{"description":"Provider features","type":"array","items":{"type":"string"}},"uptime":{"type":"string","description":"Provider uptime"},"refundAddressNeed":{"type":"boolean","description":"Whether refund address is required for swaps"},"baseUnits":{"type":"boolean","description":"If true, amounts in requests to the provider are in base units; if false, human-readable. For DEX, base units is assumed by default."},"kycLevel":{"type":"number","description":"Provider KYC level: 0 = No KYC, 1 = Rare KYC, 2 = Regular KYC","enum":[0,1,2]},"kycLevelName":{"type":"string","description":"Name of the provider's KYC level"},"legal":{"description":"Provider's legal documents (Terms of Use, etc.)","type":"array","items":{"$ref":"#/components/schemas/ProviderLegalDocumentDto"}},"description":{"type":"string","description":"Provider description for the public list"}},"required":["id","name","engine","status","supportedChains","supportedTokens","averageFee","estimatedTime","features","uptime"]},"ProviderLegalDocumentDto":{"type":"object","properties":{"docName":{"type":"string","description":"Document title"},"docLink":{"type":"string","description":"Link to the official document"}},"required":["docName","docLink"]}}}}
```

## The AggregatorInfoResponseDto object

```json
{"openapi":"3.0.0","info":{"title":"YiFi Swap Public API","version":"1.0.0"},"components":{"schemas":{"AggregatorInfoResponseDto":{"type":"object","properties":{"providers":{"description":"List of providers","type":"array","items":{"$ref":"#/components/schemas/AggregatorProviderDto"}},"totalProviders":{"type":"number","description":"Total number of providers"},"aggregatedFrom":{"description":"List of aggregated engine types","type":"array","items":{"type":"string"}},"breakdown":{"type":"object","description":"Breakdown by engine types"}},"required":["providers","totalProviders","aggregatedFrom","breakdown"]},"AggregatorProviderDto":{"type":"object","properties":{"id":{"type":"string","description":"Provider ID"},"name":{"type":"string","description":"Provider name"},"logoUrl":{"type":"string","description":"Provider logo URL"},"engine":{"type":"string","description":"Engine type","enum":["on-chain","off-chain","private"]},"status":{"type":"string","description":"Provider status","enum":["active","inactive","maintenance"]},"supportedChains":{"description":"Supported chains","type":"array","items":{"type":"string"}},"supportedTokens":{"description":"Supported tokens","type":"array","items":{"type":"string"}},"averageFee":{"type":"string","description":"Average fee"},"estimatedTime":{"type":"string","description":"Estimated time to complete"},"features":{"description":"Provider features","type":"array","items":{"type":"string"}},"uptime":{"type":"string","description":"Provider uptime"},"refundAddressNeed":{"type":"boolean","description":"Whether refund address is required for swaps"},"baseUnits":{"type":"boolean","description":"If true, amounts in requests to the provider are in base units; if false, human-readable. For DEX, base units is assumed by default."},"kycLevel":{"type":"number","description":"Provider KYC level: 0 = No KYC, 1 = Rare KYC, 2 = Regular KYC","enum":[0,1,2]},"kycLevelName":{"type":"string","description":"Name of the provider's KYC level"},"legal":{"description":"Provider's legal documents (Terms of Use, etc.)","type":"array","items":{"$ref":"#/components/schemas/ProviderLegalDocumentDto"}},"description":{"type":"string","description":"Provider description for the public list"}},"required":["id","name","engine","status","supportedChains","supportedTokens","averageFee","estimatedTime","features","uptime"]},"ProviderLegalDocumentDto":{"type":"object","properties":{"docName":{"type":"string","description":"Document title"},"docLink":{"type":"string","description":"Link to the official document"}},"required":["docName","docLink"]}}}}
```

## The QuoteItemDto object

```json
{"openapi":"3.0.0","info":{"title":"YiFi Swap Public API","version":"1.0.0"},"components":{"schemas":{"QuoteItemDto":{"type":"object","properties":{"rateId":{"type":"string","description":"Internal rateId. Pass it as `rateId` when calling `/api/aggregator/swap` to record in the transaction history which quote the user saw. The snapshot is stored in Redis for 5 minutes."},"engine":{"type":"string","description":"Engine type: on-chain or off-chain","enum":["on-chain","off-chain"]},"provider":{"type":"string","description":"Provider name"},"exchangerName":{"type":"string","description":"Display name of the route/provider. For private — \"No on-chain traceability\" / \"Fragmented path\"; for CEX/DEX — the provider name."},"exchangerProvider":{"type":"string","description":"Original provider identifier from the quote (CEX/DEX name or `private-{routeUuid}` for private)."},"logoUrl":{"type":"string","description":"Provider logo URL"},"rate":{"type":"string","description":"Exchange rate"},"estimatedOutput":{"type":"string","description":"Estimated output amount"},"inUsdValue":{"type":"number","description":"USD equivalent of the IN amount. Rate of the reference provider to USDT (TRON, then ETH, then BSC); if the reference is unavailable, the quote provider's rate is used. `null` if the rate is unavailable.","nullable":true},"inUsdRateError":{"type":"string","description":"`\"Can't fetch USD-rate\"` if the IN rate is unavailable. The quote itself is still returned.","nullable":true},"outUsdValue":{"type":"number","description":"USD equivalent of `estimatedOutput`. Rate of this quote's provider to USDT (TRON, then ETH, then BSC). `null` if unavailable (including private).","nullable":true},"outUsdDeviationPercent":{"type":"number","description":"Deviation of `outUsdValue` from `inUsdValue` in %. Negative means the user receives less in USD than they sent.","nullable":true},"fromTokenUsdtRate":{"type":"number","description":"Raw rate of 1 IN coin to USDT (TRON → ETH → BSC) via the reference provider; if the reference is unavailable, via the quote provider. `null` if the IN rate is unavailable.","nullable":true},"toTokenUsdtRate":{"type":"number","description":"Raw rate of 1 OUT coin to USDT (TRON → ETH → BSC) via this quote's provider. `null` if unavailable (including private).","nullable":true},"rateReversed":{"type":"number","description":"Inverse rate: 1 / `rate` (1 OUT coin = Y IN coin)"},"quoteId":{"type":"string","description":"Provider-side quote identifier (for create swap / rate locking)"},"gasEstimated":{"type":"string","description":"Gas estimated from provider (if available)"},"protocolFee":{"type":"string","description":"Protocol fee (if available)"},"providerFee":{"type":"string","description":"Provider fee (if available)"},"slippageTolerance":{"type":"string","description":"Slippage tolerance (if available)"},"fee":{"type":"string","description":"Fee percentage"},"estimatedTime":{"type":"string","description":"Estimated time to complete"},"kycLevel":{"type":"number","description":"Provider KYC level: 0 = No KYC, 1 = Rare KYC, 2 = Regular KYC","enum":[0,1,2]},"kycLevelName":{"type":"string","description":"Name of the provider's KYC level"},"legal":{"description":"Provider's legal documents (Terms of Use, etc.)","type":"array","items":{"$ref":"#/components/schemas/ProviderLegalDocumentDto"}},"best":{"type":"boolean","description":"Flag for the best quote by `rate` across all sources. `true` on exactly one element in `allQuotes`, at its current position in the array (not necessarily the first)."},"dataForSign":{"type":"object","description":"EIP-712 typed data for client-side signing (cow-swap)"},"schemeSign":{"type":"string","description":"Signing scheme (e.g. eip712)"},"version":{"type":"string","description":"Private route version: v1 — Monero intermediate hop; v2 — stablecoin / non-XMR. Only when engine=private.","enum":["v1","v2"]}},"required":["rateId","engine","provider","exchangerName","exchangerProvider","rate","estimatedOutput","inUsdValue","inUsdRateError","outUsdValue","outUsdDeviationPercent","fromTokenUsdtRate","toTokenUsdtRate","rateReversed","fee","estimatedTime"]},"ProviderLegalDocumentDto":{"type":"object","properties":{"docName":{"type":"string","description":"Document title"},"docLink":{"type":"string","description":"Link to the official document"}},"required":["docName","docLink"]}}}}
```

## The QuoteResponseDto object

```json
{"openapi":"3.0.0","info":{"title":"YiFi Swap Public API","version":"1.0.0"},"components":{"schemas":{"QuoteResponseDto":{"type":"object","properties":{"allQuotes":{"description":"All available quotes. Private best-per-version first (v1, v2), then CEX/DEX sorted by `rate` descending. The element with the highest `rate` has `best: true`. Empty array if there are no quotes.","type":"array","items":{"$ref":"#/components/schemas/QuoteItemDto"}},"finish":{"type":"boolean","description":"Progressive delivery: `false` means some sources are still responding (repeat the request with the same parameters), `true` means all sources have responded. Absent in synchronous mode."}},"required":["allQuotes"]},"QuoteItemDto":{"type":"object","properties":{"rateId":{"type":"string","description":"Internal rateId. Pass it as `rateId` when calling `/api/aggregator/swap` to record in the transaction history which quote the user saw. The snapshot is stored in Redis for 5 minutes."},"engine":{"type":"string","description":"Engine type: on-chain or off-chain","enum":["on-chain","off-chain"]},"provider":{"type":"string","description":"Provider name"},"exchangerName":{"type":"string","description":"Display name of the route/provider. For private — \"No on-chain traceability\" / \"Fragmented path\"; for CEX/DEX — the provider name."},"exchangerProvider":{"type":"string","description":"Original provider identifier from the quote (CEX/DEX name or `private-{routeUuid}` for private)."},"logoUrl":{"type":"string","description":"Provider logo URL"},"rate":{"type":"string","description":"Exchange rate"},"estimatedOutput":{"type":"string","description":"Estimated output amount"},"inUsdValue":{"type":"number","description":"USD equivalent of the IN amount. Rate of the reference provider to USDT (TRON, then ETH, then BSC); if the reference is unavailable, the quote provider's rate is used. `null` if the rate is unavailable.","nullable":true},"inUsdRateError":{"type":"string","description":"`\"Can't fetch USD-rate\"` if the IN rate is unavailable. The quote itself is still returned.","nullable":true},"outUsdValue":{"type":"number","description":"USD equivalent of `estimatedOutput`. Rate of this quote's provider to USDT (TRON, then ETH, then BSC). `null` if unavailable (including private).","nullable":true},"outUsdDeviationPercent":{"type":"number","description":"Deviation of `outUsdValue` from `inUsdValue` in %. Negative means the user receives less in USD than they sent.","nullable":true},"fromTokenUsdtRate":{"type":"number","description":"Raw rate of 1 IN coin to USDT (TRON → ETH → BSC) via the reference provider; if the reference is unavailable, via the quote provider. `null` if the IN rate is unavailable.","nullable":true},"toTokenUsdtRate":{"type":"number","description":"Raw rate of 1 OUT coin to USDT (TRON → ETH → BSC) via this quote's provider. `null` if unavailable (including private).","nullable":true},"rateReversed":{"type":"number","description":"Inverse rate: 1 / `rate` (1 OUT coin = Y IN coin)"},"quoteId":{"type":"string","description":"Provider-side quote identifier (for create swap / rate locking)"},"gasEstimated":{"type":"string","description":"Gas estimated from provider (if available)"},"protocolFee":{"type":"string","description":"Protocol fee (if available)"},"providerFee":{"type":"string","description":"Provider fee (if available)"},"slippageTolerance":{"type":"string","description":"Slippage tolerance (if available)"},"fee":{"type":"string","description":"Fee percentage"},"estimatedTime":{"type":"string","description":"Estimated time to complete"},"kycLevel":{"type":"number","description":"Provider KYC level: 0 = No KYC, 1 = Rare KYC, 2 = Regular KYC","enum":[0,1,2]},"kycLevelName":{"type":"string","description":"Name of the provider's KYC level"},"legal":{"description":"Provider's legal documents (Terms of Use, etc.)","type":"array","items":{"$ref":"#/components/schemas/ProviderLegalDocumentDto"}},"best":{"type":"boolean","description":"Flag for the best quote by `rate` across all sources. `true` on exactly one element in `allQuotes`, at its current position in the array (not necessarily the first)."},"dataForSign":{"type":"object","description":"EIP-712 typed data for client-side signing (cow-swap)"},"schemeSign":{"type":"string","description":"Signing scheme (e.g. eip712)"},"version":{"type":"string","description":"Private route version: v1 — Monero intermediate hop; v2 — stablecoin / non-XMR. Only when engine=private.","enum":["v1","v2"]}},"required":["rateId","engine","provider","exchangerName","exchangerProvider","rate","estimatedOutput","inUsdValue","inUsdRateError","outUsdValue","outUsdDeviationPercent","fromTokenUsdtRate","toTokenUsdtRate","rateReversed","fee","estimatedTime"]},"ProviderLegalDocumentDto":{"type":"object","properties":{"docName":{"type":"string","description":"Document title"},"docLink":{"type":"string","description":"Link to the official document"}},"required":["docName","docLink"]}}}}
```

## The TokenPairDto object

```json
{"openapi":"3.0.0","info":{"title":"YiFi Swap Public API","version":"1.0.0"},"components":{"schemas":{"TokenPairDto":{"type":"object","properties":{"fromToken":{"type":"string","description":"Source token ticker"},"fromNetwork":{"type":"string","description":"Source network"},"toToken":{"type":"string","description":"Target token ticker"},"toNetwork":{"type":"string","description":"Target network"},"availableEngines":{"description":"Available engines for this pair","type":"array","items":{"type":"string"}},"providers":{"description":"Provider IDs supporting this pair","type":"array","items":{"type":"string"}},"minAmount":{"type":"string","description":"Minimum exchange amount"},"maxAmount":{"type":"string","description":"Maximum exchange amount"}},"required":["fromToken","fromNetwork","toToken","toNetwork","availableEngines","providers","minAmount","maxAmount"]}}}}
```

## The TokenPairsResponseDto object

```json
{"openapi":"3.0.0","info":{"title":"YiFi Swap Public API","version":"1.0.0"},"components":{"schemas":{"TokenPairsResponseDto":{"type":"object","properties":{"tokenPairs":{"description":"List of token pairs","type":"array","items":{"$ref":"#/components/schemas/TokenPairDto"}},"totalPairs":{"type":"number","description":"Total number of token pairs found"}},"required":["tokenPairs","totalPairs"]},"TokenPairDto":{"type":"object","properties":{"fromToken":{"type":"string","description":"Source token ticker"},"fromNetwork":{"type":"string","description":"Source network"},"toToken":{"type":"string","description":"Target token ticker"},"toNetwork":{"type":"string","description":"Target network"},"availableEngines":{"description":"Available engines for this pair","type":"array","items":{"type":"string"}},"providers":{"description":"Provider IDs supporting this pair","type":"array","items":{"type":"string"}},"minAmount":{"type":"string","description":"Minimum exchange amount"},"maxAmount":{"type":"string","description":"Maximum exchange amount"}},"required":["fromToken","fromNetwork","toToken","toNetwork","availableEngines","providers","minAmount","maxAmount"]}}}}
```

## The CreateSwapDto object

```json
{"openapi":"3.0.0","info":{"title":"YiFi Swap Public API","version":"1.0.0"},"components":{"schemas":{"CreateSwapDto":{"type":"object","properties":{"provider":{"type":"string","description":"Provider (exchanger) name"},"fromToken":{"type":"string","description":"Source token ticker"},"fromNetwork":{"type":"string","description":"Source token network"},"toToken":{"type":"string","description":"Target token ticker"},"toNetwork":{"type":"string","description":"Target token network"},"engine":{"type":"string","description":"Provider type (cex|dex|private)","enum":["cex","dex","private"]},"amount":{"type":"number","description":"Amount to swap","minimum":1e-8},"quoteId":{"type":"string","description":"Quote ID (optional)"},"rateId":{"type":"string","description":"Internal rateId from the `/api/aggregator/quote` response. Used to record in the transaction history which quote the user saw. The snapshot lives for 5 minutes after being issued. If the rateId is expired or invalid, the request is rejected with the `RATE_EXPIRED` code."},"receiveAddress":{"type":"string","description":"Address to receive funds"},"addressFrom":{"type":"string","description":"Legacy: address from"},"slippageTolerance":{"type":"string","description":"Allowed slippage in percent","default":"0.5"},"extraIdTo":{"type":"string","description":"Additional receive identifier (tag/memo)"},"refundAddress":{"type":"string","description":"Refund address"},"refundExtraId":{"type":"string","description":"Additional refund identifier (tag/memo)"},"signature":{"type":"string","description":"User signature using the signatureScheme (e.g. EIP-712), if required by the provider"},"signatureScheme":{"type":"string","description":"Signature scheme (e.g. eip712)"},"refCode":{"type":"string","description":"Partner referral code (or a URL with ?ref= / ?refCode=). Attributes the swap to a partner via the affiliate referral node."},"utmSource":{"type":"string","description":"UTM source (e.g. telegram)"},"utmMedium":{"type":"string","description":"UTM medium (e.g. tma)"},"utmCampaign":{"type":"string","description":"UTM campaign / start_param"}},"required":["fromToken","fromNetwork","toToken","toNetwork","engine","amount"]}}}}
```

## The SwapResponseDto object

```json
{"openapi":"3.0.0","info":{"title":"YiFi Swap Public API","version":"1.0.0"},"components":{"schemas":{"SwapResponseDto":{"type":"object","properties":{"fromToken":{"type":"string","description":"Source token ticker"},"fromNetwork":{"type":"string","description":"Source token network"},"toToken":{"type":"string","description":"Target token ticker"},"toNetwork":{"type":"string","description":"Target token network"},"provider":{"type":"string","description":"Provider (exchanger) slug"},"transactionId":{"type":"string","description":"Swap transaction ID"},"accessToken":{"type":"string","description":"Secret access token for the transaction. Issued once when the swap is created and required for the client's private operations on this transaction (viewing status, cancellation, refund). Store it only on the side of the party that initiated the swap."},"externalTransactionId":{"type":"string","description":"External provider-side transaction ID (if transactionId was replaced with a uuid from admin-service)"},"status":{"type":"string","description":"Swap status","enum":["pending","processing","completed","failed"]},"statusList":{"type":"object","description":"Map of swap statuses"},"receiveAmount":{"type":"string","description":"Expected receive amount"},"expirationTime":{"type":"object","description":"Order expiration time (value from the provider response; the field path is configured in the exchanger endpoint as expirationTimePath)","nullable":true},"estimatedOutput":{"type":"string","description":"Legacy: expected output amount (use receiveAmount)"},"estimatedTime":{"type":"string","description":"Estimated completion time"},"depositAddress":{"type":"object","description":"Address to deposit funds"},"extraIdTo":{"type":"string","description":"Additional receive identifier (tag/memo)"},"refundAddress":{"type":"string","description":"Refund address"},"refundExtraId":{"type":"string","description":"Additional refund identifier (tag/memo)"},"txCreateMeta":{"type":"object","description":"Transaction creation metadata (JSON string)","nullable":true},"extraIdDeposit":{"type":"string","description":"Additional deposit identifier (tag/memo)"},"tokenForTx":{"type":"string","description":"Token for the transaction (ticker from the createExchange response)"}},"required":["fromToken","fromNetwork","toToken","toNetwork","provider","transactionId","accessToken","status","receiveAmount","estimatedTime"]}}}}
```
