version coverage sdk license GitHub issues by-label

chat on Discord follow on witter

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

  1. API Version Support
  2. Requirements
  3. Installation
  4. Usage
  5. Endpoints
  6. Issues / Bugs / Improvements
  7. Contacts

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 so async/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 or 429.
  • Non-error status codes such as >= 201, 3xx or 1xx 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

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

follow on witter

Libraries

coingecko_client
CoinGecko API client.