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

# Update token custom fees

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](/learn/networks/mainnet/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>
