package com.luno; import java.io.IOException; import java.math.BigDecimal; import com.luno.dto.LunoBoolean; import com.luno.dto.LunoException; import com.luno.dto.account.LunoAccount; import com.luno.dto.account.LunoAccountTransactions; import com.luno.dto.account.LunoBalance; import com.luno.dto.account.LunoFundingAddress; import com.luno.dto.account.LunoPendingTransactions; import com.luno.dto.account.LunoQuote; import com.luno.dto.account.LunoWithdrawals; import com.luno.dto.account.LunoWithdrawals.Withdrawal; import com.luno.dto.marketdata.LunoOrderBook; import com.luno.dto.marketdata.LunoTicker; import com.luno.dto.marketdata.LunoTickers; import com.luno.dto.marketdata.LunoTrades; import com.luno.dto.trade.LunoFeeInfo; import com.luno.dto.trade.LunoOrders; import com.luno.dto.trade.LunoOrders.Order; import com.luno.dto.trade.LunoPostOrder; import com.luno.dto.trade.LunoUserTrades; import com.luno.dto.trade.OrderType; import com.luno.dto.trade.State; public interface LunoAPI { /** * Market data API calls can be accessed by anyone without authentication. * @param pair required - Currency pair e.g. XBTZAR * @return * @throws IOException * @throws LunoException */ LunoTicker ticker(String pair) throws IOException, LunoException; /** * Returns the latest ticker indicators from all active Luno exchanges. * @return * @throws IOException * @throws LunoException */ LunoTickers tickers() throws IOException, LunoException; /** * Returns a list of bids and asks in the order book. Ask orders are sorted by price ascending. Bid orders are sorted by * price descending. Note that multiple orders at the same price are not necessarily conflated. * @param pair required - Currency pair e.g. XBTZAR * @return * @throws IOException * @throws LunoException */ LunoOrderBook orderbook(String pair) throws IOException, LunoException; /** * Returns a list of the most recent trades. At most 100 results are returned per call. * @param pair required - Currency pair e.g. XBTZAR * @param since optional - Fetch trades executed after this time, specified as a Unix timestamp in milliseconds. * @return * @throws IOException * @throws LunoException */ LunoTrades trades(String pair, Long since) throws IOException, LunoException; /** * Create an additional account for the specified currency. * You must be verified to trade currency in order to be able to create an account. A user has a limit of 4 accounts per currency. * @param currency required - The currency code for the account you want to create e.g. XBT, IDR, MYR, ZAR * @param name required - The label to use for this account e.g. "Trading ACC". * @return * @throws IOException * @throws LunoException */ LunoAccount createAccount(String currency, String name) throws IOException, LunoException; /** * Return the list of all accounts and their respective balances. * @return * @throws IOException * @throws LunoException */ LunoBalance balance() throws IOException, LunoException; /** * Return a list of transaction entries from an account.
* Transaction entry rows are numbered sequentially starting from 1, where 1 is the oldest entry. The range of rows to return * are specified with the min_row (inclusive) and max_row (exclusive) parameters. At most 1000 rows can be requested per call.
* If min_row or max_row is non-positive, the range wraps around the most recent row. For example, to fetch the 100 most recent * rows, use min_row=-100 and max_row=0. * @param id required - Account ID * @param minRow required - Minimum of the row range to return (inclusive) * @param maxRow required - Maximum of the row range to return (exclusive) * @return * @throws IOException * @throws LunoException */ LunoAccountTransactions transactions(String id, int minRow, int maxRow) throws IOException, LunoException; /** * Return a list of all pending transactions related to the account.
* Unlike account entries, pending transactions are not numbered, and may be reordered, deleted or updated at any time. * @param id * @return * @throws IOException * @throws LunoException */ LunoPendingTransactions pendingTransactions(String id) throws IOException, LunoException; /** * Returns a list of the most recently placed orders. You can specify an optional state=PENDING parameter to restrict the * results to only open orders. You can also specify the market by using the optional pair parameter. The list is truncated * after 100 items. * @param state optional - Filter to only orders of this state e.g. PENDING * @param pair optional - Filter to only orders of this currency pair e.g. XBTZAR * @return * @throws IOException * @throws LunoException */ LunoOrders listOrders(State state, String pair) throws IOException, LunoException; /** * Create a new trade order.
* Warning! Orders cannot be reversed once they have executed. Please ensure your program has been thoroughly tested before * submitting orders.
* If no base_account_id or counter_account_id are specified, your default base currency or counter currency account will be * used. You can find your account IDs by calling the Balances API https://www.luno.com/en/api#accounts-balances. * @param pair required - The currency pair to trade e.g. XBTZAR * @param type required - "BID" for a bid (buy) limit order or "ASK" for an ask (sell) limit order. * @param volume required - Amount of Bitcoin to buy or sell as a decimal string in units of BTC e.g. "1.423". * @param price required - Limit price as a decimal string in units of ZAR/BTC e.g. "1200". * @param baseAccountId optional - The base currency account to use in the trade. * @param counterAccountId optional - The counter currency account to use in the trade. * @return * @throws IOException * @throws LunoException */ LunoPostOrder postLimitOrder(String pair, OrderType type, BigDecimal volume, BigDecimal price, String baseAccountId, String counterAccountId) throws IOException, LunoException; /** * Create a new market order.
* Warning! Orders cannot be reversed once they have executed. Please ensure your program has been thoroughly tested before * submitting orders.
* If no base_account_id or counter_account_id are specified, your default base currency or counter currency account will be * used. You can find your account IDs by calling the Balances API https://www.luno.com/en/api#accounts-balances.
* A market order executes immediately, and either buys as much bitcoin that can be bought for a set amount of fiat currency, * or sells a set amount of bitcoin for as much fiat as possible. * @param pair required - The currency pair to trade e.g. XBTZAR * @param type required - "BUY" to buy bitcoin, or "SELL" to sell bitcoin. * @param counterVolume required, if type is "BUY" - For a "BUY" order: amount of local currency (e.g. ZAR, MYR) to spend as a decimal string in units of the local currency e.g. "100.50". * @param baseVolume required, if type is "SELL" - For a "SELL" order: amount of Bitcoin to sell as a decimal string in units of BTC e.g. "1.423". * @param baseAccountId optional - The base currency account to use in the trade. * @param counterAccountId optional - The counter currency account to use in the trade. * @return * @throws IOException * @throws LunoException */ LunoPostOrder postMarketOrder(String pair, OrderType type, BigDecimal counterVolume, BigDecimal baseVolume, String baseAccountId, String counterAccountId) throws IOException, LunoException; /** * Request to stop an order. * @param orderId required - The order reference as a string e.g. BXMC2CJ7HNB88U4 * @return * @throws IOException * @throws LunoException */ LunoBoolean stopOrder(String orderId) throws IOException, LunoException; /** * Get an order by its id. * @param orderId required - The order ID * @return * @throws IOException * @throws LunoException */ Order getOrder(String orderId) throws IOException, LunoException; /** * Returns a list of your recent trades for a given pair, sorted by oldest first.
* type in the response indicates the type of order that you placed in order to participate in the trade.
* If is_buy in the response is true, then the order which completed the trade (market taker) was a bid order. * @param pair required - Filter to trades of this currency pair e.g. XBTZAR * @param since optional - Filter to trades on or after this timestamp, e.g. 1470810728478 * @param limit optional - Limit to this number of trades (min 1, max 100, default 100) * @return * @throws IOException * @throws LunoException */ LunoUserTrades listTrades(String pair, Long since, Integer limit) throws IOException, LunoException; /** * Returns your fees and 30 day trading volume (as of midnight) for a given pair. * @param pair required - Filter to trades of this currency pair e.g. XBTZAR * @return * @throws IOException * @throws LunoException */ LunoFeeInfo feeInfo(String pair) throws IOException, LunoException; /** * Returns the default receive address associated with your account and the amount received via the address. You can specify an * optional address parameter to return information for a non-default receive address. In the response, total_received is the * total confirmed Bitcoin amount received excluding unconfirmed transactions. total_unconfirmed is the total sum of unconfirmed * receive transactions. * @param asset required - Currency code of the asset e.g. XBT * @param address optional - Specific Bitcoin address to retrieve. If not provided, the default address will be used. * @return * @throws IOException * @throws LunoException */ LunoFundingAddress getFundingAddress(String asset, String address) throws IOException, LunoException; /** * Allocates a new receive address to your account. There is a rate limit of 1 address per hour, but bursts of up to 10 * addresses are allowed. * @return * @throws IOException * @throws LunoException */ LunoFundingAddress createFundingAddress(String asset) throws IOException, LunoException; /** * Returns a list of withdrawal requests. * @return * @throws IOException * @throws LunoException */ LunoWithdrawals withdrawals() throws IOException, LunoException; /** * Creates a new withdrawal request. * @param type required - Withdrawal types e.g. ZAR_EFT, NAD_EFT, KES_MPESA, MYR_IBG, IDR_LLG * @param amount required - Amount to withdraw. The currency depends on the type. * @param beneficiaryId optional - The beneficiary ID of the bank account the withdrawal will be paid out to. This parameter is * required if you have multiple bank accounts. Your bank account beneficiary ID can be found by clicking on the beneficiary * name on the Beneficiaries page [https://www.luno.com/wallet/beneficiaries]. * @return * @throws IOException * @throws LunoException */ Withdrawal requestWithdrawal(String type, BigDecimal amount, String beneficiaryId) throws IOException, LunoException; /** * Returns the status of a particular withdrawal request. * @param withdrawalId required - Withdrawal ID to retrieve. * @return * @throws IOException * @throws LunoException */ Withdrawal getWithdrawal(String withdrawalId) throws IOException, LunoException; /** * Cancel a withdrawal request. This can only be done if the request is still in state PENDING. * @param withdrawalId required - ID of the withdrawal to cancel. * @return * @throws IOException * @throws LunoException */ Withdrawal cancelWithdrawal(String withdrawalId) throws IOException, LunoException; /** * Send Bitcoin from your account to a Bitcoin address or email address.
* If the email address is not associated with an existing Luno account, an invitation to create an account and claim the funds * will be sent.
* Warning! Bitcoin transactions are irreversible. Please ensure your program has been thoroughly tested before using this call. * @param amount required - Amount to send as a decimal string. * @param currency required - Currency to send e.g. XBT * @param address required - Destination Bitcoin address or email address to send to. * @param description optional - Description for the transaction to record on the account statement. * @param message optional - Message to send to the recipient. This is only relevant when sending to an email address. * @return * @throws IOException * @throws LunoException */ LunoBoolean send(BigDecimal amount, String currency, String address, String description, String message) throws IOException, LunoException; /** * Creates a new quote to buy or sell a particular amount.
* You can specify either the exact amount that you want to pay or the exact amount that you want too receive.
* For example, to buy exactly 0.1 Bitcoin using ZAR, you would create a quote to BUY 0.1 XBTZAR. The returned quote includes * the appropriate ZAR amount. To buy Bitcoin using exactly ZAR 100, you would create a quote to SELL 100 ZARXBT. The returned * quote specifies the Bitcoin as the counter amount that will be returned.
* An error is returned if your account is not verified for the currency pair, or if your account would have insufficient * balance to ever exercise the quote. * @param type required - Possible types: BUY, SELL * @param baseAmount required - Amount to buy or sell in the pair base currency. * @param pair required - Currency pair to trade e.g. XBTZAR, XBTMYR. The pair can also be flipped if you want to buy or sell * the counter currency (e.g. ZARXBT). * @return * @throws IOException * @throws LunoException */ LunoQuote createQuote(OrderType type, BigDecimal baseAmount, String pair) throws IOException, LunoException; /** * Get the latest status of a quote. * @param quoteId required - ID of the quote to retrieve. * @return * @throws IOException * @throws LunoException */ LunoQuote getQuote(String quoteId) throws IOException, LunoException; /** * Exercise a quote to perform the trade. If there is sufficient balance available in your account, it will be debited and the * counter amount credited.
* An error is returned if the quote has expired or if you have insufficient available balance. * @param quoteId required - ID of the quote to exercise. * @return * @throws IOException * @throws LunoException */ LunoQuote exerciseQuote(String quoteId) throws IOException, LunoException; /** * Discard a quote. Once a quote has been discarded, it cannot be exercised even if it has not expired yet. * @param quoteId required - ID of the quote to discard. * @return * @throws IOException * @throws LunoException */ LunoQuote discardQuote(String quoteId) throws IOException, LunoException; }