A simple and intuitive package for the CoinGecko REST API Service ( v3 ).
ΒβοΈ 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.
- βοΈ API v3
- βοΈ Community
- βοΈ dart sdk: >=
2.19.3
Add the dependency to your Dart / Flutter project:
( in pubspec.yaml
file under the dependencies
, add the following )
coingecko_client: ^1.2.2
- 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.
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.
π ping
client.ping.getResult();
π coins
client.coins.getBasicList();
client.coins.getHistory(
id: 'bitcoin',
date: DateTime.now()
);
client.coins.getMarketList(
vsCurrency: Currencies.php
);
client.coins.getInfo(id: 'verus-coin');
client.coins.getTickers(id: 'bitcoin');
client.coins.getMarketHistory(
id: 'bitcoin',
vsCurrency: Currencies.php,
days: DataRange.in1Day,
interval: 'daily'
);
client.coins.getMarketHistoryWithDateRange(
id: 'bitcoin',
vsCurrency: Currencies.php,
from: DateTime.fromMillisecondsSinceEpoch(1392577232),
to: DateTime.fromMillisecondsSinceEpoch(1396587232)
);
client.coins.getOhlcList(
id: 'bitcoin',
vsCurrency: Currencies.php,
days: DataRange.max
);
client.coins.getNewList();
client.coins.getTopGainersAndLosers(
vsCurrency: Currencies.php,
duration: CoinDuration.in14Days,
topCoins: CoinRanking.top300
);
π exchanges
client.exchanges.getList();
client.exchanges.getBasicList();
client.exchanges.getInfo(id: 'binance');
client.exchanges.getTickerList(
id: 'binance',
coinIds: ['bitcoin', 'ethereum'],
includeExchangeLogo: true,
page: 1,
depth: true,
order: ExchangeDataOrdering.trustScoreDesc
);
client.exchanges.getVolumeChartList(
id: 'binance',
days: DataRange.in1Day
);
π simple
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
);
client.simple.getTokenPrice(
id: 'avalanche',
contractAddresses: ['0x2098fABE9C82eb5280AF4841a5000f373E99a498'],
vsCurrencies: [ CryptoCurrencies.btc, CryptoCurrencies.eth ],
includeMarketCap: true,
include24hrVol: true,
include24hrChange: true,
includeLastUpdatedAt: true,
precision: 18
);
client.simple.getSupportedVsCurrencies();
π derivatives
client.derivatives.getList(
includeTickers: DerivativesTickers.unexpired
);
client.derivatives.getExchangeList(
order: DerivativesExchangeOrdering.nameAsc,
perPage: 10,
page: 2
);
client.derivatives.getExchange(
id: "bybit",
includeTickers: DerivativesTickers.unexpired
);
client.derivatives.getExchangeBasicInfoList();
π indexes
client.indexes.getList(
perPage: 10,
page: 2
);
client.indexes.getInfo(
marketId: 'bybit',
id: 'HOT',
);
client.indexes.getBasicInfo();
π nfts
client.nfts.getBasicList(
perPage: 10,
page: 2
);
client.nfts.getInfo(
id: 'meebits',
);
client.nfts.getContractInfo(
assetPlatformId: 'ethereum',
contractAddress: '0x36F379400DE6c6BCDF4408B282F8b685c56adc60',
);
π contract
client.contract.getMarketHistory(
id: 'ethereum',
contractAddress: '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984',
vsCurrency: Currencies.jpy,
days: DataRange.in2Weeks,
);
client.contract.getMarketHistoryWithDateRange(
id: 'ethereum',
contractAddress: '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984',
vsCurrency: Currencies.php,
from: DateTime.fromMillisecondsSinceEpoch(1683175446, isUtc: true),
to: DateTime.fromMillisecondsSinceEpoch(1683262856, isUtc: true),
);
π asset_platforms
client.assetPlatforms.getList();
π categories
client.categories.getBasicList();
client.categories.getList(
order: CoinCategoriesDataOrdering.marketCapAsc
);
π global
client.global.getCryptoInfo();
client.global.getDefiInfo();
π exchange rates
client.exchangeRates.getList();
π companies
client.companies.getList(
coinId: 'ethereum'
);
π trending
client.trending.getResult();
π search
client.search.getResult(query: 'bybit');
- 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.