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

# Signer

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

The **Signer** class an interface and is responsible for signing requests.

## Interface Signer

### **Methods**

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

Returns the ledger ID.

**`getAccountId()`->`AccountId`**

Returns the account ID associated with this signer.

**`getAccountKey()`->`Key`**

Returns the account key.

**`getNetwork()`->\[`Key:string]: string`**

Returns the account key.

**`sign (messages; Uint8Array[])`->** **`Promise<SignerSignature[]>`**

Sign an arbitrary list of messages.

**`getAccountBalance()`->** **`Promise<AccountBalance>`**

Returns the account balance.

**`getAccountInfo`()->** **`Promise<AccountInfo>`**

Returns the account info.

**`getAccountRecords`()->** **`Promise<TransactionRecord[]>`**

Fetch the account record for the signer's account ID.

**signTransaction extends Transaction>`(transaction:T` )->** **`Promise<T>`**

Signs a transaction, returning the signed transaction

**NOTE**: This method is allowed to mutate the parameter being passed in so the returned transaction is not guaranteed to be a new instance of the transaction.

**`checkTransaction<T extends Transaction>`** **( `transaction`: `T` )-> `Promise<T>`**

Check whether all the required fields are set appropriately. Fields such as the transaction ID's account ID should either be `null` or be equal to the signer's account ID, and the node account IDs on the request should exist within the signer's network.

**`populateTransaction<T extends Transaction>`**\*\* ( `transaction`: `T` )-> `Promise<T>`\*\*

Populate the requests with the required fields. The transaction ID should be constructed from the signer's account ID, and the node account IDs should be set using the signer's network.

**`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.

Note: This is a wrapper around the `Provder.call()` method.
