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

# Update token custom fees

> Change a token's custom fee schedule with TokenFeeScheduleUpdateTransaction, signed by the token's fee schedule key.

Update the custom fees for a given token. If the token does not have a fee schedule, the network response returned will be `CUSTOM_SCHEDULE_ALREADY_HAS_NO_FEES`. You will need to sign the transaction with the fee schedule key to update the fee schedule for the token. If you do not have a fee schedule key set for the token, you will not be able to update the fee schedule.

**Transaction Signing Requirements**

* Fee schedule key
* Transaction fee payer account key

**Transaction Fees**

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

| Property | Description |
| - | - |
| **Fee Schedule** | The new fee schedule for the token |

## Methods

| Method | Type | Requirement |
| - | - | - |
| `setTokenId(<tokenId>)` | [TokenId](/native/tokens/token-id) | Required |
| `setCustomFees(<customFees>)` | List\<[CustomFee](/native/tokens/custom-fees#custom-fee)> | Optional |

<CodeGroup>
  ```java Java theme={null}
  //Create the transaction 
  TokenFeeScheduleUpdateTransaction transaction = new TokenFeeScheduleUpdateTransaction()
       .setTokenId(tokenId)
       .setCustomFees(customFee)

  //Freeze the unsigned transaction, sign with the fee schedule key of the token, submit the transaction to a Hedera network
  TransactionResponse txResponse = transaction.freezeWith(client).sign(feeScheduleKey).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 is " +transactionStatus);
  //Version: 2.0.9
  ```

  ```javascript JavaScript theme={null}
  //Create the transaction and freeze for manual signing
  const transaction = await new TokenFeeScheduleUpdateTransaction()
       .setTokenId(tokenId)
       .setCustomFees(customFee)
       .freezeWith(client);

  //Sign the transaction with the fee schedule key
  const signTx = await transaction.sign(feeScheduleKey);

  //Submit the signed 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.toString();

  console.log("The transaction consensus status is " +transactionStatus);
  //Version: 2.0.26
  ```

  ```go Go theme={null}
  //Create the transaction and freeze for manual signing 
  transaction, err := hedera.NewTokenFeeScheduleUpdateTransaction().
  		SetCustomFees(customFees).
  		SetTokenID(tokenId).
  		FreezeWith(client)

  if err != nil {
      panic(err)
  }

  //Sign with the fee schedule key of the token, sign with the client operator private key and submit the transaction to a Hedera network
  txResponse, err := transaction.Sign(feeScheduleKey).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)
  //Version: 2.1.11
  ```

  ```rust Rust theme={null}
  // Create the transaction
  let transaction = TokenFeeScheduleUpdateTransaction::new()
      .token_id(token_id)
      .custom_fees(custom_fee)
      .freeze_with(&client)?;

  // Sign with the fee schedule key of the token and submit the transaction to a Hedera network
  let tx_response = transaction
      .sign(fee_schedule_key)
      .execute(&client).await?;

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

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

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

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