> ## Documentation Index
> Fetch the complete documentation index at: https://algolia.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Update an API key

> Replaces the permissions of an existing API key.

**Requires Admin API key**

Any unspecified attribute resets that attribute to its default value.

## Usage

<CodeGroup>
  ```cs C# theme={"system"}
  // Initialize the client
  var client = new SearchClient(new SearchConfig("ALGOLIA_APPLICATION_ID", "ALGOLIA_API_KEY"));

  // Call the API
  var response = await client.UpdateApiKeyAsync(
    "ALGOLIA_API_KEY",
    new ApiKey
    {
      Acl = new List<Acl> { Enum.Parse<Acl>("Search"), Enum.Parse<Acl>("AddObject") },
      Validity = 300,
      MaxQueriesPerIPPerHour = 100,
      MaxHitsPerQuery = 20,
    }
  );

  // print the response
  Console.WriteLine(response);
  ```

  ```dart Dart theme={"system"}
  // Initialize the client
  final client =
      SearchClient(appId: 'ALGOLIA_APPLICATION_ID', apiKey: 'ALGOLIA_API_KEY');

  // Call the API
  final response = await client.updateApiKey(
    key: "ALGOLIA_API_KEY",
    apiKey: ApiKey(
      acl: [
        Acl.fromJson("search"),
        Acl.fromJson("addObject"),
      ],
      validity: 300,
      maxQueriesPerIPPerHour: 100,
      maxHitsPerQuery: 20,
    ),
  );

  // print the response
  print(response);
  ```

  ```go Go theme={"system"}
  // Initialize the client
  client, err := search.NewClient("ALGOLIA_APPLICATION_ID", "ALGOLIA_API_KEY")
  if err != nil {
    // The client can fail to initialize if you pass an invalid parameter.
    panic(err)
  }

  // Call the API
  response, err := client.UpdateApiKey(client.NewApiUpdateApiKeyRequest(
    "ALGOLIA_API_KEY",
    search.NewEmptyApiKey().SetAcl(
      []search.Acl{search.Acl("search"), search.Acl("addObject")}).SetValidity(300).SetMaxQueriesPerIPPerHour(100).SetMaxHitsPerQuery(20)))
  if err != nil {
    // handle the eventual error
    panic(err)
  }


  // print the response
  print(response)
  ```

  ```java Java theme={"system"}
  // Initialize the client
  SearchClient client = new SearchClient("ALGOLIA_APPLICATION_ID", "ALGOLIA_API_KEY");

  // Call the API
  UpdateApiKeyResponse response = client.updateApiKey(
    "ALGOLIA_API_KEY",
    new ApiKey().setAcl(Arrays.asList(Acl.SEARCH, Acl.ADD_OBJECT)).setValidity(300).setMaxQueriesPerIPPerHour(100).setMaxHitsPerQuery(20)
  );

  // print the response
  System.out.println(response);
  ```

  ```js JavaScript theme={"system"}
  // Initialize the client
  const client = algoliasearch('ALGOLIA_APPLICATION_ID', 'ALGOLIA_API_KEY');

  // Call the API
  const response = await client.updateApiKey({
    key: 'ALGOLIA_API_KEY',
    apiKey: { acl: ['search', 'addObject'], validity: 300, maxQueriesPerIPPerHour: 100, maxHitsPerQuery: 20 },
  });


  // print the response
  console.log(response);
  ```

  ```kotlin Kotlin theme={"system"}
  // Initialize the client
  val client = SearchClient(appId = "ALGOLIA_APPLICATION_ID", apiKey = "ALGOLIA_API_KEY")

  // Call the API
  var response =
    client.updateApiKey(
      key = "ALGOLIA_API_KEY",
      apiKey =
        ApiKey(
          acl =
            listOf(
              Acl.entries.first { it.value == "search" },
              Acl.entries.first { it.value == "addObject" },
            ),
          validity = 300,
          maxQueriesPerIPPerHour = 100,
          maxHitsPerQuery = 20,
        ),
    )


  // print the response
  println(response)
  ```

  ```php PHP theme={"system"}
  // Initialize the client
  $client = SearchClient::create('ALGOLIA_APPLICATION_ID', 'ALGOLIA_API_KEY');

  // Call the API
  $response = $client->updateApiKey(
      'ALGOLIA_API_KEY',
      ['acl' => [
          'search',

          'addObject',
      ],
          'validity' => 300,
          'maxQueriesPerIPPerHour' => 100,
          'maxHitsPerQuery' => 20,
      ],
  );


  // print the response
  var_dump($response);
  ```

  ```python Python theme={"system"}
  # Initialize the client
  # In an asynchronous context, you can use SearchClient instead, which exposes the exact same methods.
  client = SearchClientSync("ALGOLIA_APPLICATION_ID", "ALGOLIA_API_KEY")

  # Call the API
  response = client.update_api_key(
      key="ALGOLIA_API_KEY",
      api_key={
          "acl": [
              "search",
              "addObject",
          ],
          "validity": 300,
          "maxQueriesPerIPPerHour": 100,
          "maxHitsPerQuery": 20,
      },
  )


  # print the response
  print(response)
  ```

  ```ruby Ruby theme={"system"}
  # Initialize the client
  client = Algolia::SearchClient.create("ALGOLIA_APPLICATION_ID", "ALGOLIA_API_KEY")

  # Call the API
  response = client.update_api_key(
    "ALGOLIA_API_KEY",
    Algolia::Search::ApiKey.new(
      acl: ["search", "addObject"],
      validity: 300,
      max_queries_per_ip_per_hour: 100,
      max_hits_per_query: 20
    )
  )


  # print the response
  puts(response)
  ```

  ```scala Scala theme={"system"}
  // Initialize the client
  val client = SearchClient(appId = "ALGOLIA_APPLICATION_ID", apiKey = "ALGOLIA_API_KEY")

  // Call the API
  val response = Await.result(
    client.updateApiKey(
      key = "ALGOLIA_API_KEY",
      apiKey = ApiKey(
        acl = Seq(Acl.withName("search"), Acl.withName("addObject")),
        validity = Some(300),
        maxQueriesPerIPPerHour = Some(100),
        maxHitsPerQuery = Some(20)
      )
    ),
    Duration(100, "sec")
  )

  // print the response
  println(response)
  ```

  ```swift Swift theme={"system"}
  // Initialize the client
  let client = try SearchClient(appID: "ALGOLIA_APPLICATION_ID", apiKey: "ALGOLIA_API_KEY")

  // Call the API
  let response = try await client.updateApiKey(
      key: "ALGOLIA_API_KEY",
      apiKey: ApiKey(
          acl: [Acl.search, Acl.addObject],
          maxHitsPerQuery: 20,
          maxQueriesPerIPPerHour: 100,
          validity: 300
      )
  )

  // print the response
  print(response)
  ```
</CodeGroup>

<Card icon="folder-code" horizontal="true" title="See the full API reference" arrow="true" href="/doc/rest-api/search/update-api-key">
  For more details about input parameters
  and response fields.
</Card>
