Skip to content

pangz-lab/coingecko_client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

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

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/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

[email protected]

Pangz#4102

follow on witter