> ## 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".

# Provider

> Use the Provider interface in the Hedera JavaScript SDK to access a network (previewnet, testnet, or mainnet) and submit any request through its call method.

<Info>
  This feature is available in the [Hedera JavaScript SDK](https://github.com/hashgraph/hedera-sdk-js) only. (version >=2.14.0).
</Info>

`Provider` provides access to a Hedera network to which requests should be submitted to. The Hedera network can be specified to `previewnet`, `testnet`, or `mainnet`.

The most important method on the provider interface is the `call` method which allows a user to submit *any* request and get the correct response for that request. For instance,Java

```javascript theme={null}
// Balance of node account ID 0.0.3 
const balance = provider.call(new AccountBalanceQuery().setAccountId(AccountId.fromString("0.0.3")));Interface Provider
```

### **Methods**

**`getLedgerId()`->** **`LedgerId`**

Returns the ledger ID of the current network.

**`getNetwork()`->** **`Map` \< `[key: string]: (string | AccountId)`>**

Returns the entire network map for the current network.

**`getAccountBalance(accountId: AccountId | string)`->** **`Promise<AccountBalance>`**

Get the balance for the specified account ID.

**`getAccountInfo(accountId: AccountId | string)`->** **`Promise<AccountInfo>`**

Get the info for the specified account ID.

**`getAccountRecords(accountId: AccountId | string)`->** **`Promise<TransactionRecord[]>`**

Get the account record for the specified account ID.

**`getTransactionReceipt(transactionId:TransactionId)`: `TransactionReceipt`**

Get a receipt for the specified transaction ID.

**`waitForReceipt(response: TransactionResponse)`->** **`Promise<TransactionReceipt>`**

Execute multiple `TransactionReceiptQuery`'s until we get an erroring status code, or a success state code.

**`call(<RequestT, ResponseT, OutputT>(request: Executable<RequestT, ResponseT, OutputT>)`->** **`Promise <Output>`**

Responsible for serializing your request and sending it over the wire to be executed, and then deserializing the response into the appropriate type.
