# API Reference

Integrator-facing contract interface for LiquidCore swaps.

Use the **Router** for execution. Direct pool calls are optional when you already know the pool address.

## Router

**LiquidCore Router:** `0x625aC1D165c776121A52ff158e76e3544B4a0b8B`

### Discovery functions

```solidity
function getPools() external pure returns (address[] memory pools)
function getPoolForPair(address tokenA, address tokenB) public view returns (address)
```

### Execution functions

```solidity
function swap(
    address tokenIn,
    address tokenOut,
    uint256 amountIn,
    uint256 minAmountOut
) external returns (uint256 amountOut)
```

```solidity
function swap(
    address tokenIn,
    address tokenOut,
    uint256 amountIn,
    uint256 minAmountOut,
    bytes32 refCode
) external returns (uint256 amountOut)
```

`refCode` is checked against an on-chain allowlist (`RefCodeRegistry`). Invalid codes do not accrue referral allocation and do not block the swap.

### Quote function

```solidity
function estimateSwap(
    address tokenIn,
    address tokenOut,
    uint256 amountIn
) external view returns (uint256 amountOut)
```

### Router errors

```solidity
error NoPoolForPair();
error TransferFailed();
```

***

## Direct pool interface

Pool addresses:

* `0xA7478A5ff7cB27A8008D6D90785db10223bc6087` (USDT0/WHYPE)
* `0xD3994A6CF46cA91536376f89aCDadf92eD289a9F` (USDC/WHYPE)
* `0x305e5B1a81879Aa0538338306Cb9430A547E1eEa` (USDH/WHYPE)

```solidity
function getTokens() external view returns (address token0, address token1)
function swap(address tokenIn, address tokenOut, uint256 amountIn, uint256 minAmountOut) external returns (uint256 amountOut)
function swap(address tokenIn, address tokenOut, uint256 amountIn, uint256 minAmountOut, bytes32 refCode) external returns (uint256 amountOut)
function estimateSwap(address tokenIn, address tokenOut, uint256 amountIn) external view returns (uint256 amountOut)
```

### Common direct-pool errors

```solidity
error InvalidToken();
error ZeroAmount();
error SlippageExceeded();
error InsufficientReserve();
error TransferFailed();
error PriceDeviationTooLarge();
```

## Integrator notes

* Use `estimateSwap` for on-chain previews and the quote API for off-chain routing.
* Always pass `minAmountOut` to protect execution.
* Allowlisted referral codes are managed in the on-chain referral registry.

Referral-specific helper functions and claiming flow are documented in [Referrals](https://docs.liqd.ag/liquidcore-integration/referrals).
