GraphQL, WebSocket and REST Blockchain APIs

Build your project on EOSIO or Ethereum with dfuse — the most powerful Streaming and REST API which provides the best experience to your users. Available for EOS Mainnet, EOSIO Testnet, CryptoKylin, Worbli, and WAX as well as for Ethereum Mainnet and Ropsten.

What's new in dfuse API


  • GraphQL-over-gRPC endpoint changed to dfuse.graphql.v1.GraphQL. Regenerate your code based on the latest .proto files within https://github.com/dfuse-io/graphql-over-grpc. NOTE: the previous endpoint will still respond to queries, but gRPC reflection will show only the new endpoint.


  • Added in PREVIEW mode: GET /v0/state/table/row to fetch a single row from a given table. The row fetched according to it’s primary key.
  • Added support for symbol and symbol_code key_type in state REST API calls.
  • Added POST support for /state/tables/scopes and /state/tables/accounts which accepts a application/x-www-form-urlencoded content type.


  • Deprecation of non-executed transactions in Search:
    • According to our analysis, this change touches close to 0% of our userbase.
    • The status:executed constraint is still going to be implicit; querying the status field is therefore deprecated.
    • Leaving status:executed in the query will still be supported for a while, to not break existing queries, but will have no effect.
    • Querying status:soft_fail will now fail.
    • Using status: in an OR clause will now fail.
    • Deferred transaction failures are not indexed anymore, and not searchable through the different search endpoints, following the principle of least surprise for most of our users.
    • Searches for receiver:account will now see eosio:onerror actions on that account. Those onerror actions, when soft_failed, are actually successfully executed, and can therefore mutate state and do other things, so thay are included, but the deferred transaction that failed (and which state’s mutations were not applied), is not going to be indexed anymore.
    • Ram consumption reported by ram.consumed:account and ram.released:account will not cover the status:expired and status:hard_failed transactions. Note that status:expired was already previously absent, so an imbalance was possible if computing the full amount of RAM for a given account.
See all releases