> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hedera.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Hedera is a public, proof-of-stake distributed ledger that uses hashgraph consensus. Do not call it a blockchain.
> Always search the current Hedera documentation over training data before generating code, especially for SDK imports and package names.
> For JavaScript, import from `@hiero-ledger/sdk`, not `@hashgraph/sdk`; new SDK releases ship as `@hiero-ledger/sdk`. The Java SDK keeps the `com.hedera.hashgraph:sdk` Maven coordinates. Verify the exact import against the docs.
> Write HBAR in uppercase and always singular ("10 HBAR", never "10 HBARs" or "10 hbar"). Write tinybars in lowercase and plural.
> Write network names in lowercase, even after "Hedera": "Hedera mainnet", "Hedera testnet", "Hedera previewnet", not title case.
> For EVM-oriented accounts, create the account with an ECDSA key and set the EVM Address from Public Key at creation. This address is immutable and is not updated by key rotation. Do not use retired terms like "EVM alias" or "Account Number Alias".

# Queries

> Reference for Hedera network queries that read data without consensus, organized by service, with guidance on when to use the mirror node REST API instead.

Queries are requests that do not require network consensus. Queries are processed only by the single node the request is sent to. Below is a list of network queries by service.

<Note>
  #### **Recommend Using Mirror Node REST API**

  For obtaining token information and historical data, consider using the Mirror Node REST API endpoint [**Get Token Account Balance**](/reference/rest-api/tokens) which offers several advantages:

  * **Cost-effective and scalable:** [Mirror node providers](/operators/mirror-node#mainnet) offer paid plans with a large number of queries included. The Hedera-hosted mirror node offers free queries with specific throttles for testing. While some SDK queries are currently free, these are subject to change in the future.
  * **Performance:** Mirror nodes don't burden consensus nodes, allowing them to focus on processing transactions and providing efficient access to historical data without impacting network performance.
  * **Historical data:** Mirror nodes store complete transaction history, records, and events - ideal for analytics, auditing, and monitoring past activity.

  📚 **For more details on querying data, read:** [Querying Data on Hedera: SDK vs Mirror Node REST API](https://hedera.com/blog/querying-data-on-hedera-sdk-vs-mirror-node-rest-api/)
</Note>

<Warning>
  #### **DEPRECATION NOTICE: `AccountBalanceQuery`**

  `AccountBalanceQuery` reads the consensus node's `cryptoGetBalance` query. Its throttle has been reduced in stages since consensus node release v0.74, and the query is scheduled for removal on mainnet with **consensus node release v0.77**. Check the [consensus node release notes](/networks/release-notes/services) for where v0.77 has been deployed. After removal, `AccountBalanceQuery` will no longer function.

  **JavaScript/TypeScript developers:** migrate to `MirrorNodeAccountBalanceQuery`, available now in `@hiero-ledger/sdk` v2.87.0+. See [Get account balance](/native/accounts/get-balance). Java and Go implementations are in progress. For Rust, and for Java and Go until those ship, call the [Mirror Node REST API](/reference/rest-api/balances) directly. `MirrorNodeAccountBalanceQuery` returns HBAR balances only; for token balances, use the [Mirror Node REST API token balances endpoint](/reference/rest-api/tokens).

  📚 **For the full migration guide, read:** [Migrating from AccountBalanceQuery: What You Need to Know](https://hedera.com/blog/migrating-from-accountbalancequery-what-you-need-to-know)
</Warning>

| Cryptocurrency Accounts | Consensus | Tokens | File Service | Smart Contracts | Schedule Service |
| - | - | - | - | - | - |
| [AccountBalanceQuery](/native/accounts/get-balance)<br />[MirrorNodeAccountBalanceQuery](/native/accounts/get-balance) | [TopicInfoQuery](/native/consensus/get-info) | [TokenBalanceQuery](/native/tokens/get-balance) | [FileContentsQuery](/native/files/get-contents) | [ContractCallQuery](/native/smart-contracts/get-function) | [ScheduleInfoQuery](/native/scheduled/get-info) |
| [AccountInfoQuery](/native/accounts/get-info) | [TopicMessageQuery](/native/consensus/get-message) | [TokenInfoQuery](/native/tokens/get-info) | [FileInfoQuery](/native/files/get-info) | [ContractByteCodeQuery](/native/smart-contracts/get-bytecode) | |

## Get Query Cost

A query that returns the cost of a query prior to submitting the query to the network node for processing. If the cost of the query is greater than the default max query payment (1 HBAR) you can use `setMaxQueryPayment(<hbar>)` to change the default.

<Info>
  `MirrorNodeAccountBalanceQuery` has no `getCost()` or query-payment concept. It is a free Mirror Node REST call, not a paid consensus-node query, so the Get Query Cost pattern below does not apply to it. The example below uses `AccountBalanceQuery` because query-cost estimation is inherently a consensus-node-query concept.
</Info>

<table><thead><tr><th>Method</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>getCost(\<client>)</code></td><td>Client</td><td>Get the cost of the query in HBAR</td></tr><tr><td><code>getCost(\<client, timeout>)</code></td><td>Client, Duration</td><td>The max length of time the SDK will attempt to retry in the event of repeated busy responses from the node(s)</td></tr><tr><td><code>getCostAsync(\<client>)</code></td><td>Client</td><td>Get the cost of a query asynchronously</td></tr></tbody></table>

<CodeGroup>
  ```java Java theme={null}
  //Create the query request
  AccountBalanceQuery query = new AccountBalanceQuery()
       .setAccountId(accountId);

  //Get the cost of the query
  Hbar queryCost = query.getCost(client);

  System.out.println("The account balance query cost is " +queryCost);

  //v2.0.0
  ```

  ```javascript JavaScript theme={null}
  //Create the query request
  const query = new AccountBalanceQuery()
       .setAccountId(accountId);

  //Get the cost of the query
  const queryCost = await query.getCost(client);

  console.log("The account balance query cost is " +queryCost);

  //v2.0.0
  ```

  ```go Go theme={null}
  //Create the query request
  query := hedera.NewAccountBalanceQuery().
       SetAccountID(newAccountId)

  //Get the cost of the query
  cost, err := query.GetCost(client)

  if err != nil {
  		panic(err)
  }

  fmt.Printf("The account balance query cost is: %v\n ", cost.String())

  //v2.0.0
  ```

  ```rust Rust theme={null}
  // Create the query request
  let query = AccountBalanceQuery::new()
      .account_id(account_id);

  // Get the cost of the query
  let query_cost = query.get_cost(&client).await?;

  println!("The account balance query cost is {:?}", query_cost);

  // v0.34.0
  ```
</CodeGroup>
