Home

Awesome

BlockFrost Service API

INTRODUCTION

This library is for accessing the Cardano blockchain via BlockFrost service nodes. BlockFrost allows access to the blockchain for light clients that do not wish to run a dedicated, resource intensive, Cardano node locally.

This code is available as a package on pub.dev: https://pub.dev/packages/blockfrost

Warning: This library is a minimal unofficial Blockfrost implementation created to support Flutter SDK.

Tests

To run the tests, you must download a apiKey from https://blockfrost.io, then place the key in the parent directory of your project in a file with the name:

    blockfrost_project_id.txt

i.e.

echo "your-project-id" > ../blockfrost_project_id.txt

MyApiKeyAuthInterceptor will read the key on startup and insert it into the REST header requests.

  final instance = Blockfrost(
    basePathOverride: testnet,
    interceptors: [MyApiKeyAuthInterceptor()],
  );

Production

To use this code in production, simply replace MyApiKeyAuthInterceptor with BlockfrostApiKeyAuthInterceptor, passing your project_id key into the constructor:

BlockfrostApiKeyAuthInterceptor(projectId:'your-project-id')

Here is an implemenation - blockfrost_api_key_auth.dart:

import 'package:dio/dio.dart';
import 'package:blockfrost/src/auth/auth.dart';

class BlockfrostApiKeyAuthInterceptor extends AuthInterceptor {
  final String projectId;
  BlockfrostApiKeyAuthInterceptor({required this.projectId});
  @override
  void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
    options.headers['project_id'] = projectId;
    super.onRequest(options, handler);
  }
}

Usage

Refer to the generated documentation below and tests for example usage. Be aware, this is very low-level, blockchain-specific code. If you wish to send transactions or work with smart contracts, you'll need a higher level API. The cardano_wallet_sdk (by the same author) is a good resource for code and tests that demonstrate how to use this API to build higher level services.

Status

Five Binaries was granted $10,000 in Fund 6 to implement an official BlockFrost Dart binding:

https://cardano.ideascale.com/c/idea/369239

The source code can be found here:

https://github.com/blockfrost/blockfrost-dart/

When the official implementation matures, this project will be discontinued.

Support

This is not an official blockfrost package so please do not contract BlockFrost with issues specific to this code.

GENERATED DOCUMENTATION - blockfrost (EXPERIMENTAL)

Blockfrost is an API as a service that allows users to interact with the Cardano blockchain and parts of its ecosystem.

Tokens

After signing up on https://blockfrost.io, a project_id token is automatically generated for each project. HTTP header of your request MUST include this project_id in order to authenticate against Blockfrost servers.

Available networks

At the moment, you can use the following networks. Please, note that each network has its own project_id.

<table> <tr><td><b>Network</b></td><td><b>Endpoint</b></td></tr> <tr><td>Cardano mainnet</td><td><tt>https://cardano-mainnet.blockfrost.io/api/v0</td></tt></tr> <tr><td>Cardano testnet</td><td><tt>https://cardano-testnet.blockfrost.io/api/v0</tt></td></tr> <tr><td>InterPlanetary File System</td><td><tt>https://ipfs.blockfrost.io/api/v0</tt></td></tr> </table>

Concepts

Errors

HTTP Status codes

The following are HTTP status code your application might receive when reaching Blockfrost endpoints and it should handle all of these cases.

Error codes

An internal error code number is used for better indication of the error in question. It is passed using the following payload.

{
  \"status_code\": 403,
  \"error\": \"Forbidden\",
  \"message\": \"Invalid project token.\"
}

Limits

There are two types of limits we are enforcing:

The first depends on your plan and is the number of request we allow per day. We defined the day from midnight to midnight of UTC time.

The second is rate limiting. We limit an end user, distinguished by IP address, to 10 requests per second. On top of that, we allow each user to send burst of 500 requests, which cools off at rate of 10 requests per second. In essence, a user is allowed to make another whole burst after (currently) 500/10 = 50 seconds. E.g. if a user attemtps to make a call 3 seconds after whole burst, 30 requests will be processed. We believe this should be sufficient for most of the use cases. If it is not and you have a specific use case, please get in touch with us, and we will make sure to take it into account as much as we can.

Authentication

<!-- ReDoc-Inject: <security-definitions> -->

This Dart package is automatically generated by the OpenAPI Generator project:

Requirements

Installation & Usage

pub.dev

To use the package from pub.dev, please include the following in pubspec.yaml

dependencies:
  blockfrost: 1.0.0

Github

If this Dart package is published to Github, please include the following in pubspec.yaml

dependencies:
  blockfrost:
    git:
      url: https://github.com/GIT_USER_ID/GIT_REPO_ID.git
      #ref: main

Local development

To use the package from your local drive, please include the following in pubspec.yaml

dependencies:
  blockfrost:
    path: /path/to/blockfrost

Getting Started

Please follow the installation procedure and then run the following:

import 'package:blockfrost/blockfrost.dart';


final api = CardanoAccountsApi();
final stakeAddress = stake1u9ylzsgxaa6xctf4juup682ar3juj85n8tx3hthnljg47zctvm3rc; // String | Bech32 stake address.
final count = 56; // int | The number of results displayed on one page.
final page = 56; // int | The page number for listing the results.
final order = order_example; // String | The ordering of items from the point of view of the blockchain, not the page listing itself. By default, we return oldest first, newest last. 

try {
    final response = await api.accountsStakeAddressAddressesAssetsGet(stakeAddress, count, page, order);
    print(response);
} catch on DioError (e) {
    print("Exception when calling CardanoAccountsApi->accountsStakeAddressAddressesAssetsGet: $e\n");
}

Documentation for API Endpoints

All URIs are relative to https://cardano-mainnet.blockfrost.io/api/v0

ClassMethodHTTP requestDescription
CardanoAccountsApiaccountsStakeAddressAddressesAssetsGetget /accounts/{stake_address}/addresses/assetsAssets associated with the account addresses
CardanoAccountsApiaccountsStakeAddressAddressesGetget /accounts/{stake_address}/addressesAccount associated addresses
CardanoAccountsApiaccountsStakeAddressDelegationsGetget /accounts/{stake_address}/delegationsAccount delegation history
CardanoAccountsApiaccountsStakeAddressGetget /accounts/{stake_address}Specific account address
CardanoAccountsApiaccountsStakeAddressHistoryGetget /accounts/{stake_address}/historyAccount history
CardanoAccountsApiaccountsStakeAddressMirsGetget /accounts/{stake_address}/mirsAccount MIR history
CardanoAccountsApiaccountsStakeAddressRegistrationsGetget /accounts/{stake_address}/registrationsAccount registration history
CardanoAccountsApiaccountsStakeAddressRewardsGetget /accounts/{stake_address}/rewardsAccount reward history
CardanoAccountsApiaccountsStakeAddressWithdrawalsGetget /accounts/{stake_address}/withdrawalsAccount withdrawal history
CardanoAddressesApiaddressesAddressGetget /addresses/{address}Specific address
CardanoAddressesApiaddressesAddressTotalGetget /addresses/{address}/totalAddress details
CardanoAddressesApiaddressesAddressTransactionsGetget /addresses/{address}/transactionsAddress transactions
CardanoAddressesApiaddressesAddressTxsGetget /addresses/{address}/txsAddress transactions
CardanoAddressesApiaddressesAddressUtxosGetget /addresses/{address}/utxosAddress UTXOs
CardanoAssetsApiassetsAssetAddressesGetget /assets/{asset}/addressesAsset addresses
CardanoAssetsApiassetsAssetGetget /assets/{asset}Specific asset
CardanoAssetsApiassetsAssetHistoryGetget /assets/{asset}/historyAsset history
CardanoAssetsApiassetsAssetTransactionsGetget /assets/{asset}/transactionsAsset transactions
CardanoAssetsApiassetsAssetTxsGetget /assets/{asset}/txsAsset transactions
CardanoAssetsApiassetsGetget /assetsAssets
CardanoAssetsApiassetsPolicyPolicyIdGetget /assets/policy/{policy_id}Assets of a specific policy
CardanoBlocksApiblocksEpochEpochNumberSlotSlotNumberGetget /blocks/epoch/{epoch_number}/slot/{slot_number}Specific block in a slot in an epoch
CardanoBlocksApiblocksHashOrNumberGetget /blocks/{hash_or_number}Specific block
CardanoBlocksApiblocksHashOrNumberNextGetget /blocks/{hash_or_number}/nextListing of next blocks
CardanoBlocksApiblocksHashOrNumberPreviousGetget /blocks/{hash_or_number}/previousListing of previous blocks
CardanoBlocksApiblocksHashOrNumberTxsGetget /blocks/{hash_or_number}/txsBlock transactions
CardanoBlocksApiblocksLatestGetget /blocks/latestLatest block
CardanoBlocksApiblocksLatestTxsGetget /blocks/latest/txsLatest block transactions
CardanoBlocksApiblocksSlotSlotNumberGetget /blocks/slot/{slot_number}Specific block in a slot
CardanoEpochsApiepochsLatestGetget /epochs/latestLatest epoch
CardanoEpochsApiepochsLatestParametersGetget /epochs/latest/parametersLatest epoch protocol parameters
CardanoEpochsApiepochsNumberBlocksGetget /epochs/{number}/blocksBlock distribution
CardanoEpochsApiepochsNumberBlocksPoolIdGetget /epochs/{number}/blocks/{pool_id}Block distribution
CardanoEpochsApiepochsNumberGetget /epochs/{number}Specific epoch
CardanoEpochsApiepochsNumberNextGetget /epochs/{number}/nextListing of next epochs
CardanoEpochsApiepochsNumberParametersGetget /epochs/{number}/parametersProtocol parameters
CardanoEpochsApiepochsNumberPreviousGetget /epochs/{number}/previousListing of previous epochs
CardanoEpochsApiepochsNumberStakesGetget /epochs/{number}/stakesStake distribution
CardanoEpochsApiepochsNumberStakesPoolIdGetget /epochs/{number}/stakes/{pool_id}Stake distribution by pool
CardanoLedgerApigenesisGetget /genesisBlockchain genesis
CardanoMetadataApimetadataTxsLabelsGetget /metadata/txs/labelsTransaction metadata labels
CardanoMetadataApimetadataTxsLabelsLabelCborGetget /metadata/txs/labels/{label}/cborTransaction metadata content in CBOR
CardanoMetadataApimetadataTxsLabelsLabelGetget /metadata/txs/labels/{label}Transaction metadata content in JSON
CardanoPoolsApipoolsGetget /poolsList of stake pools
CardanoPoolsApipoolsPoolIdBlocksGetget /pools/{pool_id}/blocksStake pool blocks
CardanoPoolsApipoolsPoolIdDelegatorsGetget /pools/{pool_id}/delegatorsStake pool delegators
CardanoPoolsApipoolsPoolIdGetget /pools/{pool_id}Specific stake pool
CardanoPoolsApipoolsPoolIdHistoryGetget /pools/{pool_id}/historyStake pool history
CardanoPoolsApipoolsPoolIdMetadataGetget /pools/{pool_id}/metadataStake pool metadata
CardanoPoolsApipoolsPoolIdRelaysGetget /pools/{pool_id}/relaysStake pool relays
CardanoPoolsApipoolsPoolIdUpdatesGetget /pools/{pool_id}/updatesStake pool updates
CardanoPoolsApipoolsRetiredGetget /pools/retiredList of retired stake pools
CardanoPoolsApipoolsRetiringGetget /pools/retiringList of retiring stake pools
CardanoTransactionsApitxSubmitPostpost /tx/submitSubmit a transaction
CardanoTransactionsApitxsHashDelegationsGetget /txs/{hash}/delegationsTransaction delegation certificates
CardanoTransactionsApitxsHashGetget /txs/{hash}Specific transaction
CardanoTransactionsApitxsHashMetadataCborGetget /txs/{hash}/metadata/cborTransaction metadata in CBOR
CardanoTransactionsApitxsHashMetadataGetget /txs/{hash}/metadataTransaction metadata
CardanoTransactionsApitxsHashMirsGetget /txs/{hash}/mirsTransaction MIRs
CardanoTransactionsApitxsHashPoolRetiresGetget /txs/{hash}/pool_retiresTransaction stake pool retirement certificates
CardanoTransactionsApitxsHashPoolUpdatesGetget /txs/{hash}/pool_updatesTransaction stake pool registration and update certificates
CardanoTransactionsApitxsHashStakesGetget /txs/{hash}/stakesTransaction stake addresses certificates
CardanoTransactionsApitxsHashUtxosGetget /txs/{hash}/utxosTransaction UTXOs
CardanoTransactionsApitxsHashWithdrawalsGetget /txs/{hash}/withdrawalsTransaction withdrawal
HealthApihealthClockGetget /health/clockCurrent backend time
HealthApihealthGetget /healthBackend health status
HealthApirootGetget /Root endpoint
IPFSAddApiipfsAddPostpost /ipfs/addAdd a file or directory to IPFS
IPFSGatewayApiipfsGatewayIPFSPathGetget /ipfs/gateway/{IPFS_path}Relay to an IPFS gateway
IPFSPinsApiipfsPinAddIPFSPathPostpost /ipfs/pin/add/{IPFS_path}Pin an object
IPFSPinsApiipfsPinListGetget /ipfs/pin/list/
IPFSPinsApiipfsPinListIPFSPathGetget /ipfs/pin/list/{IPFS_path}
IPFSPinsApiipfsPinRemoveIPFSPathPostpost /ipfs/pin/remove/{IPFS_path}
MetricsApimetricsEndpointsGetget /metrics/endpointsBlockfrost endpoint usage metrics
MetricsApimetricsGetget /metrics/Blockfrost usage metrics
NutLinkApinutlinkAddressGetget /nutlink/{address}
NutLinkApinutlinkAddressTickersGetget /nutlink/{address}/tickers
NutLinkApinutlinkAddressTickersTickerGetget /nutlink/{address}/tickers/{ticker}
NutLinkApinutlinkTickersTickerGetget /nutlink/tickers/{ticker}

Documentation For Models

Documentation For Authorization

ApiKeyAuth