> ## Documentation Index
> Fetch the complete documentation index at: https://hedera-0c6e0218-mintlify-4a9eb0b1.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Associate tokens to an account

> Associate fungible tokens or NFTs with a Hedera account using TokenAssociateTransaction so the account can hold and transfer Hedera Token Service assets.

Associates the provided Hedera account with the provided Hedera token(s). Hedera accounts must be associated with a fungible or non-fungible token first before you can transfer tokens to that account. When you transfer a custom fungible or non-fungible token to the alias account ID, the token association step is skipped and the account will automatically be associated with the token upon creation. In the case of NON\_FUNGIBLE **Type**, once an account is associated, it can hold any number of NFTs (serial numbers) of that token type. The Hedera account that is associated with a token is required to sign the transaction.

* If the provided account is not found, the transaction will resolve to `INVALID_ACCOUNT_ID`.
* If the provided account has been deleted, the transaction will resolve to `ACCOUNT_DELETED`.
* If any of the provided tokens is not found, the transaction will resolve to `INVALID_TOKEN_REF`.
* If any of the provided tokens has been deleted, the transaction will resolve to `TOKEN_WAS_DELETED`.
* If an association between the provided account and any of the tokens already exists, the transaction will resolve to `TOKEN_ALREADY_ASSOCIATED_TO_ACCOUNT`.
* If the provided account's associations count exceeds the constraint of maximum token associations per account, the transaction will resolve to `TOKENS_PER_ACCOUNT_LIMIT_EXCEEDED`.
* On success, associations between the provided account and tokens are made and the account is ready to interact with the tokens.

<Info>
  There is currently no limit on the number of token IDs that can be associated with an account (reference [HIP-367](https://hips.hedera.com/hip/hip-367)). Still, you can see `TOKENS_PER_ACCOUNT_LIMIT_EXCEEDED` responses for *pre-HIP-367* transactions.
</Info>

**Transaction Signing Requirements**

* The key of the account the token is being associated to
* Transaction fee payer account key

**Transaction Fees**

* Please see the transaction and query [fees](/learn/networks/mainnet/fees#transaction-and-query-fees) table for the base transaction fee
* Please use the [Hedera fee estimator](https://hedera.com/fees) to estimate your transaction fee cost

## Constructor

| Constructor                       | Description                                      |
| --------------------------------- | ------------------------------------------------ |
| `new TokenAssociateTransaction()` | Initializes the TokenAssociateTransaction object |

## Transaction Properties

| Method                        | **Type**       | Requirement |
| ----------------------------- | -------------- | ----------- |
| `setAccountId(<accountId>)`   | AccountId      | Required    |
| `setTokenIds(<tokenIds>)`     | List\<TokenId> | Required    |
| `setHighVolume(<highVolume>)` | boolean        | Optional    |

## Get Transaction Values

| Method            | **Type**       | Description                                                                                                                                   |
| ----------------- | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `getAccountId()`  | AccountId      | Returns the account to be associated                                                                                                          |
| `getTokenIds()`   | List\<TokenId> | Returns the list of tokens to be associated                                                                                                   |
| `getHighVolume()` | boolean        | Returns whether this transaction uses [high-volume throttles](/learn/core-concepts/high-volume-entity-creation#high-volume-throttle-capacity) |

<Note>
  This transaction supports [high-volume entity creation](/learn/core-concepts/high-volume-entity-creation)
  (HIP-1313). Setting `setHighVolume(true)` routes the transaction through dedicated
  high-volume throttle capacity with variable-rate pricing for both fungible and NFT mints.
  Always pair this with `setMaxTransactionFee()` to cap your costs.
</Note>

<CodeGroup>
  ```java Java theme={null}
  //Associate a token to an account
  TokenAssociateTransaction transaction = new TokenAssociateTransaction()
          .setAccountId(accountId)
          .setTokenIds(Collections.singletonList(tokenId));

  //Freeze the unsigned transaction, sign with the private key of the account that is being associated to a token, submit the transaction to a Hedera network
  TransactionResponse txResponse = transaction.freezeWith(client).sign(accountKey).execute(client);

  //Request the receipt of the transaction
  TransactionReceipt receipt = txResponse.getReceipt(client);

  //Get the transaction consensus status
  Status transactionStatus = receipt.status;

  System.out.println("The transaction consensus status " +transactionStatus);
  //v2.0.4
  ```

  ```javascript JavaScript theme={null}
  //Associate a token to an account and freeze the unsigned transaction for signing
  const transaction = await new TokenAssociateTransaction()
       .setAccountId(accountId)
       .setTokenIds([tokenId])
       .freezeWith(client);

  //Sign with the private key of the account that is being associated to a token 
  const signTx = await transaction.sign(accountKey);

  //Submit the transaction to a Hedera network    
  const txResponse = await signTx.execute(client);

  //Request the receipt of the transaction
  const receipt = await txResponse.getReceipt(client);

  //Get the transaction consensus status
  const transactionStatus = receipt.status;

  console.log("The transaction consensus status " +transactionStatus.toString());

  //v2.0.7
  ```

  ```go Go theme={null}
  //Associate the token to an account and freeze the unsigned transaction for signing
  transaction, err := hedera.NewTokenAssociateTransaction().
          SetAccountID(accountId).
          SetTokenIDs(tokenId).
          FreezeWith(client)

  if err != nil {
      panic(err)
  }

  //Sign with the private key of the account that is being associated to a token, submit the transaction to a Hedera network
  txResponse, err = transaction.Sign(accountKey).Execute(client)

  if err != nil {
      panic(err)
  }

  //Request the receipt of the transaction
  receipt, err = txResponse.GetReceipt(client)

  if err != nil {
      panic(err)
  }

  //Get the transaction consensus status
  status := receipt.Status

  fmt.Printf("The transaction consensus status is %v\n", status)

  //v2.1.0
  ```

  ```rust Rust theme={null}
  // Associate a token to an account
  let transaction = TokenAssociateTransaction::new()
      .account_id(account_id)
      .token_ids(vec![token_id]);

  // Freeze the unsigned transaction, sign with the private key of the account
  let tx_response = transaction
      .freeze_with(&client)?
      .sign(account_key)
      .execute(&client).await?;

  // Request the receipt of the transaction
  let receipt = tx_response.get_receipt(&client).await?;

  // Get the transaction consensus status
  let status = receipt.status;

  println!("The transaction consensus status is {:?}", status);

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