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

# Batch indexing operations on one index

> Adds, updates, or deletes records in one index with a single API request.

**Required ACL:** `addObject`

Batching index updates reduces latency and increases data integrity.

* Actions are applied in the order they're specified.
* Actions are equivalent to the individual API requests of the same name.

This operation is subject to [indexing rate limits](https://support.algolia.com/hc/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia).

## 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.BatchAsync(
    "<YOUR_INDEX_NAME>",
    new BatchWriteParams
    {
      Requests = new List<BatchRequest>
      {
        new BatchRequest
        {
          Action = Enum.Parse<Action>("AddObject"),
          Body = new Dictionary<string, string> { { "key", "bar" }, { "foo", "1" } },
        },
        new BatchRequest
        {
          Action = Enum.Parse<Action>("AddObject"),
          Body = new Dictionary<string, string> { { "key", "baz" }, { "foo", "2" } },
        },
      },
    }
  );

  // 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.batch(
    indexName: "<YOUR_INDEX_NAME>",
    batchWriteParams: BatchWriteParams(
      requests: [
        BatchRequest(
          action: Action.fromJson("addObject"),
          body: {
            'key': "bar",
            'foo': "1",
          },
        ),
        BatchRequest(
          action: Action.fromJson("addObject"),
          body: {
            'key': "baz",
            'foo': "2",
          },
        ),
      ],
    ),
  );

  // 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.Batch(client.NewApiBatchRequest(
    "<YOUR_INDEX_NAME>",
    search.NewEmptyBatchWriteParams().SetRequests(
      []search.BatchRequest{
        *search.NewEmptyBatchRequest().SetAction(search.Action("addObject")).SetBody(map[string]any{"key": "bar", "foo": "1"}),
        *search.NewEmptyBatchRequest().SetAction(search.Action("addObject")).SetBody(map[string]any{"key": "baz", "foo": "2"}),
      }),
  ))
  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
  BatchResponse response = client.batch(
    "<YOUR_INDEX_NAME>",
    new BatchWriteParams().setRequests(
      Arrays.asList(
        new BatchRequest()
          .setAction(Action.ADD_OBJECT)
          .setBody(
            new HashMap() {
              {
                put("key", "bar");
                put("foo", "1");
              }
            }
          ),
        new BatchRequest()
          .setAction(Action.ADD_OBJECT)
          .setBody(
            new HashMap() {
              {
                put("key", "baz");
                put("foo", "2");
              }
            }
          )
      )
    )
  );

  // 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.batch({
    indexName: '<YOUR_INDEX_NAME>',
    batchWriteParams: {
      requests: [
        { action: 'addObject', body: { key: 'bar', foo: '1' } },
        { action: 'addObject', body: { key: 'baz', foo: '2' } },
      ],
    },
  });


  // 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.batch(
      indexName = "<YOUR_INDEX_NAME>",
      batchWriteParams =
        BatchWriteParams(
          requests =
            listOf(
              BatchRequest(
                action = Action.entries.first { it.value == "addObject" },
                body =
                  buildJsonObject {
                    put("key", JsonPrimitive("bar"))
                    put("foo", JsonPrimitive("1"))
                  },
              ),
              BatchRequest(
                action = Action.entries.first { it.value == "addObject" },
                body =
                  buildJsonObject {
                    put("key", JsonPrimitive("baz"))
                    put("foo", JsonPrimitive("2"))
                  },
              ),
            )
        ),
    )


  // 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->batch(
      '<YOUR_INDEX_NAME>',
      ['requests' => [
          ['action' => 'addObject',
              'body' => ['key' => 'bar',
                  'foo' => '1',
              ],
          ],

          ['action' => 'addObject',
              'body' => ['key' => 'baz',
                  'foo' => '2',
              ],
          ],
      ],
      ],
  );


  // 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.batch(
      index_name="<YOUR_INDEX_NAME>",
      batch_write_params={
          "requests": [
              {
                  "action": "addObject",
                  "body": {
                      "key": "bar",
                      "foo": "1",
                  },
              },
              {
                  "action": "addObject",
                  "body": {
                      "key": "baz",
                      "foo": "2",
                  },
              },
          ],
      },
  )


  # 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.batch(
    "<YOUR_INDEX_NAME>",
    Algolia::Search::BatchWriteParams.new(
      requests: [
        Algolia::Search::BatchRequest.new(action: "addObject", body: {key: "bar", foo: "1"}),
        Algolia::Search::BatchRequest.new(action: "addObject", body: {key: "baz", foo: "2"})
      ]
    )
  )


  # 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.batch(
      indexName = "<YOUR_INDEX_NAME>",
      batchWriteParams = BatchWriteParams(
        requests = Seq(
          BatchRequest(
            action = Action.withName("addObject"),
            body = JObject(List(JField("key", JString("bar")), JField("foo", JString("1"))))
          ),
          BatchRequest(
            action = Action.withName("addObject"),
            body = JObject(List(JField("key", JString("baz")), JField("foo", JString("2"))))
          )
        )
      )
    ),
    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.batch(
      indexName: "<YOUR_INDEX_NAME>",
      batchWriteParams: SearchBatchWriteParams(requests: [
          SearchBatchRequest(action: SearchAction.addObject, body: ["key": "bar", "foo": "1"]),
          SearchBatchRequest(action: SearchAction.addObject, body: ["key": "baz", "foo": "2"]),
      ])
  )

  // 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/batch">
  For more details about input parameters
  and response fields.
</Card>
