coingecko_client
CoinGecko API client for Dart
A simple and intuitive package for the CoinGecko REST API Service ( v3 ).
βοΈ Why this βπ€¨π€
βοΈ fully tested ( see test coverage ).
βοΈ simple and easy to use.
βοΈ almost all results are converted to model/dto/entity ( so you don't need to worry about making your own model classes ).
βοΈ fully documented.
βοΈ actively being developed and supported.
π‘ You can go directly to the examples and see for yourself.
Table of Contents
API Version Support
- βοΈ API v3
- βοΈ Community
Requirements
- βοΈ dart sdk: >=
2.19.3
Installation
Add the dependency to your Dart / Flutter project:
( in pubspec.yaml
file under the dependencies
, add the following )
coingecko_client: ^1.2.2
Go to pub.dev for more details.
Usage
- Import the library and initialize the client class.
import 'package:coingecko_client/coingecko_client.dart';
final client = CoinGeckoClient();
- Use any of the client properties to access the services.
(use coins)
- All results are returned from a
Future
object soasync/await
is necessary.
final coinHistory = await client.coins.getHistory(
id: 'bitcoin',
date: DateTime.now()
);
- The following sample just prints the property so just do yours here.
- π‘ TIP : Most editors(especially VS Code) supports object reflection. You can hover on the result object to conveniently get all the available properties you can use.
print(coinHistory);
print(coinHistory.name);
- Result varies depending on the endpoint.
- It's recommended to wrap it within a
try/catch
block to handle the runtime errors - not only because it's part of the package design but also the ideal way to do this.
Sample Usage
import 'package:coingecko_client/coingecko_client.dart';
void main() async {
try {
final client = CoinGeckoClient();
final coinHistory = await client.coins.getHistory(
id: 'bitcoin',
date: DateTime.now()
);
print(coinHistory);
print(coinHistory.name);
} on Exception catch (e, _) {
/// Exception handling
/// All runtime exceptions will go here.
/// All http status code other than 200 will also be here.
/// [Sample error handling]
print("error occured");
if(e is NetworkRequestException) {
print(e.statusCode);
} else {
rethrow;
}
}
}
- Look at the sample code.
- HTTP status code other than 200 will be raised as an exception. i.e.
404
or429
. - Non-error status codes such as
>= 201
,3xx
or1xx
will still be treated as an exception as the API service does not require methods other than GET request. - This might change in the future but it's not part of their service as of now. (YAGNI)
- Check here for more examples.
Endpoints
Community
π ping
π€ /ping
client.ping.getResult();
π coins
π€ /coins/list
client.coins.getBasicList();
π€ /coins/{id}/history
client.coins.getHistory(
id: 'bitcoin',
date: DateTime.now()
);
π€ /coins/markets
client.coins.getMarketList(
vsCurrency: Currencies.php
);
π€ /coins/{id}
client.coins.getInfo(id: 'verus-coin');
π€ /coins/{id}/tickers
client.coins.getTickers(id: 'bitcoin');
π€ /coins/{id}/market_chart
client.coins.getMarketHistory(
id: 'bitcoin',
vsCurrency: Currencies.php,
days: DataRange.in1Day,
interval: 'daily'
);
π€ /coins/{id}/market_chart/range
client.coins.getMarketHistoryWithDateRange(
id: 'bitcoin',
vsCurrency: Currencies.php,
from: DateTime.fromMillisecondsSinceEpoch(1392577232),
to: DateTime.fromMillisecondsSinceEpoch(1396587232)
);
π€ /coins/{id}/ohlc
client.coins.getOhlcList(
id: 'bitcoin',
vsCurrency: Currencies.php,
days: DataRange.max
);
π°PRO Endpoints
π€ /coins/list/new
client.coins.getNewList();
π€ /coins/top_gainers_losers
client.coins.getTopGainersAndLosers(
vsCurrency: Currencies.php,
duration: CoinDuration.in14Days,
topCoins: CoinRanking.top300
);
π exchanges
π€ /exchanges
client.exchanges.getList();
π€ /exchanges/list
client.exchanges.getBasicList();
π€ /exchanges/{id}
client.exchanges.getInfo(id: 'binance');
π€ /exchanges/{id}/tickers
client.exchanges.getTickerList(
id: 'binance',
coinIds: ['bitcoin', 'ethereum'],
includeExchangeLogo: true,
page: 1,
depth: true,
order: ExchangeDataOrdering.trustScoreDesc
);
π€ /exchanges/{id}/volume_chart
client.exchanges.getVolumeChartList(
id: 'binance',
days: DataRange.in1Day
);
π simple
π€ /simple/price
client.simple.getCoinPrice(
ids: ['bitcoin', 'ethereum', 'verus-coin'],
vsCurrencies: [ Currencies.jpy, Currencies.usd, Currencies.php ],
includeMarketCap: true,
include24hrVol: true,
include24hrChange: true,
includeLastUpdatedAt: true,
precision: 18
);
π€ /simple/token_price/{id}
client.simple.getTokenPrice(
id: 'avalanche',
contractAddresses: ['0x2098fABE9C82eb5280AF4841a5000f373E99a498'],
vsCurrencies: [ CryptoCurrencies.btc, CryptoCurrencies.eth ],
includeMarketCap: true,
include24hrVol: true,
include24hrChange: true,
includeLastUpdatedAt: true,
precision: 18
);
π€ /simple/supported_vs_currencies
client.simple.getSupportedVsCurrencies();
π derivatives
π€ /derivatives
client.derivatives.getList(
includeTickers: DerivativesTickers.unexpired
);
π€ /derivatives/exchanges
client.derivatives.getExchangeList(
order: DerivativesExchangeOrdering.nameAsc,
perPage: 10,
page: 2
);
π€ /derivatives/exchanges/{id}
client.derivatives.getExchange(
id: "bybit",
includeTickers: DerivativesTickers.unexpired
);
π€ /derivatives/exchanges/list
client.derivatives.getExchangeBasicInfoList();
π indexes
π€ /indexes
client.indexes.getList(
perPage: 10,
page: 2
);
π€ /indexes/{market_id}/{id}
client.indexes.getInfo(
marketId: 'bybit',
id: 'HOT',
);
π€ /indexes/list
client.indexes.getBasicInfo();
π nfts
π€ /nfts/list
client.nfts.getBasicList(
perPage: 10,
page: 2
);
π€ /nfts/{id}
client.nfts.getInfo(
id: 'meebits',
);
π€ /nfts/{asset_platform_id}/contract/{contract_address}
client.nfts.getContractInfo(
assetPlatformId: 'ethereum',
contractAddress: '0x36F379400DE6c6BCDF4408B282F8b685c56adc60',
);
π contract
π€ /coins/{id}/contract/{contract_address}/market_chart
client.contract.getMarketHistory(
id: 'ethereum',
contractAddress: '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984',
vsCurrency: Currencies.jpy,
days: DataRange.in2Weeks,
);
π€ /coins/{id}/contract/{contract_address}/market_chart/range
client.contract.getMarketHistoryWithDateRange(
id: 'ethereum',
contractAddress: '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984',
vsCurrency: Currencies.php,
from: DateTime.fromMillisecondsSinceEpoch(1683175446, isUtc: true),
to: DateTime.fromMillisecondsSinceEpoch(1683262856, isUtc: true),
);
π asset_platforms
π€ /asset_platforms
client.assetPlatforms.getList();
π categories
π€ /coins/categories/list
client.categories.getBasicList();
π€ /coins/categories
client.categories.getList(
order: CoinCategoriesDataOrdering.marketCapAsc
);
π global
π€ /global
client.global.getCryptoInfo();
π€ /global/decentralized_finance_defi
client.global.getDefiInfo();
π exchange rates
π€ /exchange_rates
client.exchangeRates.getList();
π companies
π€ /companies/public_treasury/{coin_id}
client.companies.getList(
coinId: 'ethereum'
);
π trending
π€ /search/trending
client.trending.getResult();
π search
π€ /search
client.search.getResult(query: 'bybit');
π Issues / Bugs / Improvements
- If you found any issues or bugs, please raise it here.
- For urgent fix, please chat directly to the discord channel and I'll find time to resolve it.
- Should you decide to make your own change, create your own branch and raise a PR to the master branch and ping me.
- Any suggestions or concerns, you can contact me directly using discord, twitter or email.
Contacts
pangz.lab@gmail.com
Pangz#4102
Libraries
- coingecko_client
- CoinGecko API client.