The following one is the interface for the IdleTokenV3 contract. Note that IdleTokens are ERC20 so they will also support methods from the ERC20 standard like approve , transfer, balanceOf

interface IIdleToken {
function token() external returns (address underlying);
function userAvgPrices(address) external returns (uint256 avgPrice);
function mintIdleToken(uint256 _amount, bool _skipWholeRebalance) external returns (uint256 mintedTokens);
function redeemIdleToken(uint256 _amount, bool _skipRebalance, uint256[] calldata _clientProtocolAmounts) external returns (uint256 redeemedTokens);
function redeemInterestBearingTokens(uint256 _amount) external;
function rebalance() external returns (bool);
function rebalanceWithGST() external returns (bool);
function openRebalance(uint256[] calldata _newAllocations) external returns (bool, uint256 avgApr);
function tokenPrice() external view returns (uint256 price);
function getAPRs() external view returns (address[] memory addresses, uint256[] memory aprs);
function getAvgAPR() external view returns (uint256 avgApr);
function getCurrentAllocations() external view returns (address[] memory tokenAddresses, uint256[] memory amounts, uint256 total);
// Old V2 methods
function mintIdleToken(uint256 _amount, uint256[] calldata _clientProtocolAmounts) external returns (uint256 mintedTokens);
function rebalance(uint256 _newAmount, uint256[] calldata _clientProtocolAmounts) external returns (bool);