Deprecations & Release Notes

For the time being, please head over to for the latest release notes.


  • GraphQL-over-gRPC endpoint changed to dfuse.graphql.v1.GraphQL. Regenerate your code based on the latest .proto files within 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.


  • Beta dfuse Events is now live.


  • Added in PREVIEW mode: GET /v0/transaction/:id to fetch the transaction lifecycle associated with the :id path parameter.


  • Breaking change : /v1/chain/push_transation with in-block guarantee now requires authentication.


  • Beta Brand new GraphQL interface to EOSIO chain data. See documentation and announcement .

  • New streaming search capabilities (through GraphQL):

    • You can now stream dfuse Search query results in real-time.

    • It allows you to navigate forks with greater ease than before.

    • Provides a chain-wide cursor, that allows you to continue listing transactions from where you left off, with message-per-message granularity (instead of block granularity, as previously).

    • The cursor allows you to search backwards (to get recent transactions), and then flip the direction and listen to real-time events, guaranteeing there’s no gaps.

    • See announcement


  • Breaking change (low risk): Search requests that do not specify status: in the query will automatically search only for status:executed transactions. Some people were surprised to receive failed transactions. This protects you from making wrong decisions because of an oversight.


  • Added irreversible_only flag to get_action_traces websocket request.


  • Added in PREVIEW mode: GET /v0/state/key_accounts to fetch the list of accounts controlled by the given public key, at any block height.

  • Added in PREVIEW mode: GET /v0/state/table_scopes to fetch the list of scopes of a given table on a contract’s account, at any block height.

  • Added console outputs to action traces throughout the dfuse platform.

  • Added creation_tree, visible on See announcement Best way to consume this is through the GraphQL interface.


  • Clarified the use of cursor, and describe the behavior of forked_head_warning.

  • Improved the documentation of the query language.


  • POST /v1/chain/push_transaction now supports new push-guarantees: handoff:1, handoffs:2 and handoffs:3, allowing more flexible rules to guarantee transaction delivery based on your application’s requirements. See announcement


  • Fully standardized error messages format returned to consumer.

    Our error message structure for both the REST API and WebSocket API is now fully standardized across all our endpoints.

    The format is as follow:

  "code": "a_unique_error_code_for_this_specific_error",
  "trace_id": "unique_id_identifying_your_request",
  "message": "A descriptive error message about the problem.",
  "details": {
    "key": "contextual key/values pairs specific to each error"

Each error returned to you has a unique code field which descriptively identifies the error. The error code is stable in time and can be programmatically relied upon in your code to process the error.

The trace_id uniquely identifies your request, will change upon each request, being unique across all traces. This can be provided to our support team when investigating problems.

The message is a human-readable english string about why the error happen and what was wrong exactly. It may change over time and should not be used to determine what the error was. Use the code field for that purpose.

The details is a key/value pair object and is optional, so it might or might not be present. It contains error specific details about what went wrong for a given error code. It’s unique per code, and can be used programmatically to extract information about the error.



  • Released PREVIEW of dfuse Structured Query Engine or (SQE).

  • Renamed TableDelta to TableDeltaResponse, and TableDelta is now the inner data field of that response.

  • Renamed TableSnapshot to TableSnapshotResponse, and TableRows is now the inner data field of that response.

  • Renamed TransactionLifecycle to TransactionLifecycleResponse, and TransactionLifecycle is now the inner data field of that response.



  • Added in PREVIEW mode: GET /v0/state/abi to fetch the ABI of a given account (contract) at any given block height.

  • Added in PREVIEW mode: POST /v0/state/abi/bin_to_json to decode hexadecimal raw data of multiple rows against the ABI of a given account (contract) at any given block height.



  • Added in PREVIEW mode: GET /v0/state/tables/scopes to fetch a given table/scope pair for multiple contracts in a single command (up to 1500).

  • Bumped GET /v0/state/tables/accounts limit on accounts to 1500.



  • Added in PREVIEW mode: GET /v0/state/permission_links to fetch authorization linked to a particular account at any given point in time.



  • DEPRECATED: The domain, which some users used at the very beginning of dfuse will be shutdown in 7 days. Use the new endpoints listed above.

  • Added support to filter multiple accounts, receivers and action_names in the get_action_traces WS request.

    • The account, receiver and action_name parameters are still supported by DEPRECATED, and will be removed in a future release.

    • Please use that instead of doing multiple parallel get_action_traces


Breaking changes

  • Breaking change get_table_rows listen response fields undo: true and redo: true are replaced by step: "undo" and step: "redo"


  • Added in PREVIEW mode: GET /v0/state/tables/accounts to fetch a given table/scope pair for multiple contracts in a single command (up to 500)

  • POST /v1/chain/push_transaction supports anonymous access for in-block guarantees.


  • get_transaction_lifecycle now correctly sends an update upon irreversibility. It also contains a “transaction_status” parameter.

  • Fixed get_table_rows encoding errors on some rows (that were in fact deleted)

  • Added get_head_info to get current state of chain (last block, current producer, etc.)


Breaking changes (within reason, during beta period)

  • get_transaction was renamed to: get_transaction_lifecycle
  • get_transaction_lifecycle:
    • now returns transaction_lifecycle, a message format that has changed quite heavily to include information about deferred creation, deferred execution, irreversibility of the different blocks, etc. See docs for details.
  • get_actions was renamed to: get_action_traces
  • get_action_traces:
    • with_deferred was renamed to with_dtrxops
  • get_table_rows:
    • data.table_name parameter renamed to data.table (for consistency with the REST API)
    • data.verbose option removed
    • the struture of the rows has changed in the table_delta message.
    • dbop is now a nested object
    • dbop.key is now a name-encoded value
    • dbop.old and represent the old and new values, payers.zz

New features

  • Added REST endpoint /v0/state/table added. See docs for details.

  • Added REST endpoint /v1/chain as passthrough to a reliable node

  • Added guarantees to REST endpoint /v1/chain/push_transaction. See docs for details.

  • get_transaction_lifecycle: now supports “fetch” AND “listen” modes, the listen mode will send updated objects when new block affects the trx.

  • get_table_rows: the fetch: true argument now returns a snapshot of the table at the block requested. Adding listen: true streams changes as they arrive.

  • get_table_rows: when switching longest chain, you will now receive undo and redo operations allowing you to stay completely in sync with the longest chain (provided you apply those deltas to a client-side full table state)

  • action_trace message now includes a block_time


  • get_actions request: renamed parameter with_ram_costs to with_ramops (get_actions is now get_action_traces).